2009-03-04 22 views
1

LINQ to Entitiesを使用して別のテーブルに外部キーを持つテーブルに新しいレコードを追加する方法を頭を悩ませています。私は試して説明します:アソシエーションを使用して新しいLINQオブジェクトを作成する

私は2つのテーブルを持つ単純なデータベースを持っていると言う。たとえば、1つのLibraryItemともう1つの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(); 

答えて

0

は、これが "正しい" 方法ですDBに問い合わせる)。

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

グッド:決して任意のクエリ

これは "ハックが、より高速な方法" です。悪い:item.Statusを参照することはできません。それでもnullになります。

更新There will be a better way to do this in .NET 4.0.

0

item.StatusReferenceプロパティを確認します。これにより、実際にクエリを実行することなく、関係のメタデータの検出/設定が可能になります。

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

か::

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

...オブジェクトがすでにロードされている場合entities.Status.First常にます(メモリからロードされます

0

またentitymodelであなたのItemEntityに関連するテーブルをマッピングすることができます。

私は、下のURLに掲載された自分のプロジェクトのProduct - > ProductLanguageのProductNameでこれを行っています。

openticket.codeplex.com

関連する問題