2012-07-27 130 views
1

我有以下代碼:如何在EF中設置外鍵值?

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(); 

與正是我要在數據庫中插入創建一個對象。但是,當我嘗試保存該記錄我得到的錯誤:

Entities in 'xxxx' participate in the 'xxxx' relationship. 0 related 'xxxx' were found. 1 '' is expected.

BudgetLineItem表中有一個名爲lu_Department表這是什麼錯誤引用一個外鍵關係。

我發現this question似乎提供了一個解決方案,但它似乎過於複雜,我想要做什麼。

我最好的選擇問題中提供的解決方案鏈接到?如果是這樣,EF爲什麼這麼複雜?

回答

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的實體分配