假设公司有员工。公司'解决方案'有员工'詹姆斯'
这些实体都保存在数据库中,它们的关系通过外键表示。
在应用程序级别,Employee类具有Company对象属性,用于定义关系。
假设一家新公司' Better Solutions'已创建,但尚未存在于数据库中,詹姆斯现在转移到该公司。
如何告诉EF处理此问题?目前我:
保存新公司' Better Solutions' (使用GUID ID创建的对象)到DB:
db.Companies.Add(newCompany);
更改Jame实例上的公司属性:
james.Company = newCompany;
告诉EF James实例上的某个属性已更改并需要更新:
db.Employees.Attach(james);
db.Entry(james).State = System.Data.Entity.EntityState.Modified;
但是当发生这种情况时,newCompany
对象还没有新的数据库ID(即使它已被添加到数据库中,该对象仍保留GUID ID),所以当保存EF尝试执行此操作时:
UPDATE [dbo].[Employee]
SET [CompanyID] = SomeGUID,
WHERE ([EmployeeID] = JamesID)
当然会抛出异常,因为没有CompanyID与GUID匹配:
The UPDATE statement conflicted with the FOREIGN KEY constraint
在这种情况下,我是否需要先将newCompany对象推送到DB,然后从DB中检索它(以获取新ID),然后将此检索对象设置为James的公司属性?
或者EF有更清洁的方式来处理这一切吗?
答案 0 :(得分:1)
尝试如下所示。首先保存公司,然后将其分配给将更新现有员工的詹姆斯。
db.Companies.Add(newCompany);
db.SaveChanges();
james.Company = newCompany;
db.SaveChanges();