2009-05-08 21 views
5

私はORMにlinq 2 sqlを使用します。指定したLinq-to-Sqlオブジェクトがdatacontextにアタッチされているかどうかを確認するにはどうすればよいですか?

パフォーマンス上の理由から、私はそれらの一部をシリアル化し、me​​mcachedにスローします。

デシリアライズされている間は、これらのシナリオでの読み込みにのみ使用されるため、100%のデータコンテキストには接続されません。

ただし、私は与えられたオブジェクトが(dbからフェッチされた)datacontextに接続されているかどうか(memcachedからフェッチされているかどうか)を知ることができます。

アイデア?

ありがとうございました。

答えて

9

GetOriginalEntityStateを使用します。ここにテストがあります。

 
Customer cust = new Customer(); 
ctx.Customers.Attach(cust); 

Customer orig = ctx.Customers.GetOriginalEntityState(cust); 

//test if orig is null 
+1

Davidさん、ありがとうございました。 しかし、コンテキストから来たエンティティをアタッチしようとすると例外がスローされます。このチェックがガードとして頻繁に実行されると高価になることがあります:\ – Thenon

+0

'GetOriginalEntityState'メソッドとヌルチェック最初に「Attach」という呼出しがなくても動作するようです。 entityTable.InsertAllOnSubmit(entities.Where(e => entityTable.GetOriginalEntityState(e)== null)) 'はすべての新しいエンティティを正しく挿入します。 – bstoney