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'の関係に参加します。関連する「xxxx」が0個見つかりました。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」ではなく、エンティティを直接アタッチすることをお勧めします。これにより、DBコンテキストが設計されたエンティティ関係を処理するため、問題が解決します。

これらすべてのIDがFKの場合は、lu_Departmentのようにエンティティの割り当てに変更します。

于 2012-07-27T18:21:29.413 に答える