我有以下代码:
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
的表有外键关系,这是错误引用的。
我发现this question似乎提供了解决方案,但对于我想要做的事情来说,它似乎过于复杂。
我最好选择我链接的问题中提供的解决方案吗?如果是这样,为什么EF会让这么复杂?
答案 0 :(得分: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那样的实体分配