为什么EF试图添加新记录而不是编辑?

为什么EF试图添加新记录而不是编辑?

问题描述:

我有以下代码:为什么EF试图添加新记录而不是编辑?

 var currentUser = (from i in _dbContext.Users 
          where i.FirstName == user.FirstName && i.LastName == user.LastName 
           && i.Title == user.Title && i.Company == user.Company 
          select i).FirstOrDefault(); 

         currentUser.Company = user.Company; 
         currentUser.CompanyUrl = user.CompanyUrl; 
         currentUser.Country = user.Country; 

         _dbContext.SaveChanges(); 

,但我得到一个错误

{“的UNIQUE KEY约束 'IX_Users' 冲突不能插入对象 'dbo.Users' 重复键。重复的键值是(A8,B8 ,C8)。\ r \ n该语句已终止。“}

所以,它说,EF尝试添加新的记录,而不是编辑电流。为什么?

+0

是这段代码执行如何? – 2012-02-02 19:26:30

+0

public void RegisterUser(用户用户,字符串用户名,字符串密码) {/ *此代码* /}然后调用此方法 – John 2012-02-02 19:32:01

我认为这个问题会结合usercurrentUser。它很可能会更新您的currentUser,但同时插入user。其原因可能是这样的:

currentUser.Company = user.Company; 

如果公司有用户导航属性,如果你正在使用POCO模板,这都将Companyuser作为新的实体连接上下文。

试试这个:

var currentUser = ...; 

var company = new Company { Id = user.Company.Id }; 
_dbContext.Companies.Attach(company); 

currentUser.Company = company; 
... 

_dbContext.SaveChanges(); 
+0

hm,可能是。但为什么以及如何检查? – John 2012-02-02 20:37:53

+0

您不能将分离的实体与附加的组合在一起。 EF不允许由分离和附加实体组成的实体图。如果你已经分离了'user',那么你不能将其分离的'Company'分配给附加'currentUser'。它将使所有三个实体连接并保存。 – 2012-02-02 20:42:50

+0

是的,问题在其中。但真的不明白。我创建用户作为新的用户(),它没有附加到_dbContent.Also,所有这3个字段都是字符串。 – John 2012-02-02 20:59:05