C# 实体框架在调用SaveChanges时创建新记录
我有两个实体:C# 实体框架在调用SaveChanges时创建新记录,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,我有两个实体: public class Order:Entity { public virtual User User { get; set; } ... } public class User:Entity { public virtual ICollection<Order> Orders { get; set; } ... } 这是CreateTransientOrder。只创建订单,不保存到数据库: public Order CreateTran
public class Order:Entity
{
public virtual User User { get; set; }
...
}
public class User:Entity
{
public virtual ICollection<Order> Orders { get; set; }
...
}
这是CreateTransientOrder
。只创建订单
,不保存到数据库:
public Order CreateTransientOrder(string orderNumbers, User currentUser)
{
...fill fields
order.User = currentUser;
return order;
}
_orderService.CreateOrder(PcpSession.Order);
现在一切都好了。接下来,我将订单保存到数据库:
public Order CreateTransientOrder(string orderNumbers, User currentUser)
{
...fill fields
order.User = currentUser;
return order;
}
_orderService.CreateOrder(PcpSession.Order);
这是CreateOrder
:
public void CreateOrder(Order order)
{
order.OrderDate = DateTime.Now;
_repository.Save(order);
_repository.SaveChanges();
}
这是我的Save
存储库方法:
public void Save<T>(T entity) where T : class, IEntity
{
_context.Set<T>().Add(entity);
}
public void Save(T实体),其中T:class,entity
{
_context.Set().Add(实体);
}
在数据库中调用SaveChanges
时,将创建具有新ID的新用户,并且order具有新用户ID。在CreateOrder
方法的调试器中,ID等于当前用户。哪里有问题?谢谢 上下文可能没有跟踪用户。将订单添加到上下文时,它还会添加相关实体,然后在保存更改时创建新用户(或尝试创建新用户)
Attach()
在调用\u context.Set().Add(实体)之前将用户连接到上下文代码>我想问题与您提供的代码无关。它似乎与初始化PcpSession.CurrentUser的位置有关
似乎PcpSession.CurrentUser
对象未附加到上下文。在进行相关调用之前,请将此实体提取到上下文中,或者附加它。如果未附加到上下文中,则需要附加实体
例如,在通用存储库中
> public void Add(T entity)
> {
> entity.Create = DateTime.Now;
> db.Set<T>().Attach(entity); // Add Line
> db.Set<T>().Add(entity);
> Save();
> }
>公共作废添加(T实体)
> {
>entity.Create=DateTime.Now;
>db.Set().Attach(实体);//添加行
>db.Set().Add(实体);
>Save();
> }
我不知道它是否干净,但它控制了问题我使用的是通用上下文。我不知道该怎么做。@user1260827您是否有用户外键?也就是说,不要使用order.User=currentUser
设置与order.UserId=currentUser.UserId
的关联。