Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架在调用SaveChanges时创建新记录_C#_Entity Framework_Entity Framework 5 - Fatal编程技术网

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
的关联。