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

时间:2012-02-02 19:09:52

标签: asp.net-mvc-3 entity-framework-4

我有以下代码:

        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试图添加新记录而不是编辑当前。为什么呢?

1 个答案:

答案 0 :(得分:3)

我认为问题在于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();