我有以下代码:
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 :(得分:3)
我认为问题在于user
和currentUser
的结合。它很可能会更新您的currentUser
,但同时会插入user
。原因可能是:
currentUser.Company = user.Company;
如果公司具有“用户”导航属性,并且您正在使用POCO模板,则会将Company
和user
作为新实体连接到上下文。
试试这个:
var currentUser = ...;
var company = new Company { Id = user.Company.Id };
_dbContext.Companies.Attach(company);
currentUser.Company = company;
...
_dbContext.SaveChanges();