我必须做一些体操来更新一个包含对另一个实体的引用的实体,我不明白为什么,因为在我的边测试项目中它没有工作。
问题似乎是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。