我不得不做一些体操来更新一个包含对另一个实体的引用的实体,我不明白为什么,因为在我的测试项目中它没有。
问题似乎是 DbContext 包含具有相同主键但其他属性已更改的多个实体。
所以,我必须做类似下面的代码来正确设置引用。
如果我不这样做,我会在数据库中创建一个新的“Tax”实体,这不是我想要的,而是对现有实体的引用。
if (!Database.Set<Tax>().Local.Any(e => e.ID == invoiceDetail.Tax.ID))
Database.Taxes.Attach(invoiceDetail.Tax);
else
invoiceDetail.Tax = Database.Set<Tax>().Local.Single(e => e.ID == invoiceDetail.Tax.ID);
为什么我必须手动检查 Local 对象才能使其工作?为什么 DbContext 包含多个主键相同的实体实例?我在 Code First (Poco) 中使用 EF4.3。