2009-06-15 2 views
3

私が知っている特定のID(以下のサンプルでは、​​Id = 5のシンボル)をデータベースに格納していると仮定して、別のエンティティにデータベースからロードする必要なしにアタッチすることができます(同じシナリオは "DeleteObject"にも当てはまります)。Entity Frameworkでデータベース呼び出しのないEntityKeyからEntityObjectを構築する

私は次のことを試してみた:

UserSpread spread = UserSpread.CreateUserSpread(5, 500000, 1.1m, 1.5m); 

EntityKey symbolKey = new EntityKey("Entities.SymbolSet", "Id", 5); 

Symbol symbol = new Symbol(); 
symbol.EntityKey = symbolKey; 

// dealingEntities.Attach(symbol); 

spread.Symbol = symbol; 
Entities.AddToSpreadSet(spread); 

私は「AddToSpreadSet()」メソッドに次の例外を取得:

は、「オブジェクトがあるため、それすでにObjectStateManagerに追加することはできませんObjectContext.Attachを使用すると、既存のキーを持つオブジェクトをアタッチできます。

私はスプレッド(コメント行)に割り当てる前に記号を添付しようとすると、私は「のSaveChanges()」メソッドで次を得る:

「オブジェクトがあるため接続できませんEntityKeyの一部であるプロパティの値が、EntityKeyの対応する値と一致しません。


おかげで、
ニール

答えて

3

私はちょうど(ちょうどPKを設定することにより)スタブエンティティを作成し、コンテキストにそれを添付することで使用の一般的なアプローチ。だからここ

は一例です。

Category existing = new Category {ID = 7}; 
ctx.AttachTo("Categories", existing); // Notice no use of EntityKey anywhere 


// build a new product 
... 
product.Category = existing; 
ctx.AddToProducts(product); 
ctx.SaveChanges(); 

これは、建築関係のためにうまく動作しますが、削除するときに、いくつかの注意点があります。詳細については私のEF tips seriesを必ずチェックしてください。 特に、この1:

Tip 9 - How to delete an object without retrieving it

希望これは、あなたが求めているものを行うことが可能である

アレックス

+0

ニース!魅力のように動作します、ありがとう! Nir。 – nirpi

1

に役立ちます。次のようなことをする必要があります:

dealingEntities.symbolReference.EntityKey = new EntityKey( "Entities.SymbolSet"、 "Id"、5);

それは意味がありますか?エンティティ名が混在している可能性がありますので、詳しい情報が必要な場合は私に尋ねてください。

+0

接続されていないモデルを使用しようとしている場合、これが方法です。 – JustEngland

関連する問題