1

LINQ to Entitiesを使用して、別のテーブルへの外部キーを持つテーブルに新しいレコードを追加する方法に頭を悩ませようとしています。説明してみます:

2つのテーブルを持つ単純なデータベースがあるとします。たとえば、一方のLibraryItemともう一方のLibraryItemStatusを呼び出します。LibaryItemにはLibraryItemStatusテーブルへの外部キーがあるため、アイテムにステータスを割り当てることができます。

私の質問は、LINQ To Entitiesを使用して新しいLibraryItemを作成し、それをステータスに関連付けるにはどうすればよいですか?以下の私のコードは間違っているに違いありませんが、役立つ例が見つかりません。

LibraryEntities entities = new LibraryEntities();

LibraryItem item = new LibraryItem();
item.Name = "some name";
item.SomeAttribute = "x";
// What do I do here?
// This seems wrong as I don't want a new status.
item.Status = new Status() { id = 1 };
// This seems wrong as I don't really want to have to query the repository
item.Status = entities.Status.First(s => s.StatusID == 1);
// 
entities.AddToItems(item);
entities.Savechanges();
4

3 に答える 3

0

item.StatusReferenceプロパティを確認します。これにより、実際にクエリを実行しなくても、リレーションシップのメタデータを検出/設定できます。

于 2009-03-04T20:36:34.430 に答える
0

これが「正しい」方法です。

item.Status = entities.Status.First(s => s.StatusID == 1);

また:

item.Status = entities.GetObjectByKey(new EntityKey("MyContext.Status", "StatusID", 1));

...オブジェクトが既にロードされている場合、メモリからロードされます (entities.Status.First は常に DB を照会します)。

これは「ハックですがより高速な方法」です。

item.StatusReference.EntityKey = new EntityKey("MyContext.Status", "StatusID", 1);

良い: クエリはありません。悪い: item.Status を参照できません。それはまだnullになります。

更新: .NET 4.0 でこれを行うためのより良い方法があります。

于 2009-03-04T20:50:26.003 に答える
0

関連テーブルをエンティティモデルの ItemEntity にマップすることもできます。

以下の URL で公開されている私のプロジェクトの Product -> ProductLanguage の ProductName に対してこれを行いました。

openticket.codeplex.com

于 2009-03-17T09:27:14.630 に答える