使用实体框架保存 InvoiceDetail 时,我们检查税收信息是否已被删除,如果我们看到我们仍然有税收,我们检查我们是否在税收的 DbSet 中已经有了税收,因为我们只想要对这个对象的引用到我们的 InvoiceDetail。为此,我们只需检查当地财产并从当地获取税款。
if (formInvoiceDetail.Tax != null) {
if (formInvoiceDetail.Tax.ID == 0) {
databaseInvoiceDetail.Tax = null;
}
else {
if (!Database.Set<Tax>().Local.Any(e => e.ID == formInvoiceDetail.Tax.ID)){
Database.Taxes.Attach(formInvoiceDetail.Tax);
}
databaseInvoiceDetail.Tax = Database.Set<Tax>().Local.Single(e => e.ID == formInvoiceDetail.Tax.ID);
}
}
问题是我们遇到了 Single 崩溃的情况,因为 ID 在 Tax 的 DbSet 中重复。
当先前的操作设置额外的现有税务信息时会发生这种情况(例如,第一次加载将使用税务对象(仅其 ID)加载 InvoiceDetail,稍后将更改 invoiceDetail.Tax = fullLoadedTax。
如果我们不想在 DbSet 中有重复的数据并且总是“最准确”的数据,我们该如何进行?