1

我有以下代码:

BudgetLineItem actualLi = new BudgetLineItem();
actualLi.YearId = be.lu_FiscalYear.Where(t => t.Year == actualYear).Select(t => t.Id).First();
actualLi.TypeId = be.lu_Type.Where(t => t.Name == "Actual").Select(t => t.id).First();
actualLi.DeptId = be.lu_Department.Where(t => t.Name == DeptName).Select(t => t.ID).First();
actualLi.LineItemId = be.lu_LineItem.Where(t => t.Name == revenueType).Select(t => t.id).First();
actualLi.Amount = actualAmount;
be.AddToBudgetLineItems(actualLi);
be.SaveChanges();

它创建了一个我想要在数据库中插入的对象。但是当我尝试保存这条记录时,我得到了错误:

“xxxx”中的实体参与“xxxx”关系。找到 0 个相关的“xxxx”。1 '' 是预期的。

我的表与错误引用BudgetLineItem的表有外键关系。lu_Department

我发现这个问题似乎提供了一个解决方案,但对于我想要做的事情来说似乎过于复杂。

我的最佳选择是我链接到的问题中提供的解决方案吗?如果是这样,为什么 EF 让这变得如此复杂?

4

1 回答 1

0
BudgetLineItem actualLi = new BudgetLineItem();
actualLi.YearId = be.lu_FiscalYear.FirstOrDefault(t => t.Year == actualYear);
actualLi.TypeId = be.lu_Type.FirstOrDefault(t => t.Name == "Actual");
actualLi.Dept = be.lu_Department.FirstOrDefault(t => t.Name == DeptName)
actualLi.LineItemId = be.lu_LineItem.FirstOrDefault(t => t.Name == revenueType)
actualLi.Amount = actualAmount;
be.AddToBudgetLineItems(actualLi);
be.SaveChanges();

我建议直接附加实体而不是使用“ID”。这将解决问题,因为您的数据库上下文将处理为其设计的实体关系

如果所有这些 Id 都是 FK,则将它们更改为分配实体,例如 lu_Department

于 2012-07-27T18:21:29.413 回答