2
私はコード・ファーストについて読ん以来

はこれで問題がある可能性があります(そのわずかプレビューが)私はfolowingとしてEF4 CTP5リリースで2問題を抱えている:Entity Frameworkの4(CTP 5)同時実行

「新変更トラッキングAPI」 と言われていますが、トラッキングの変更はありません。 SQLへ

LINQ:

Dim db2 As New LINQDataContext 
Dim db3 As New LINQDataContext 

db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1" 
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2" 

db2.SubmitChanges() 
db3.SubmitChanges() 

EF 4 CTP5:

Dim db2 As New ProductContext 
Dim db3 As New ProductContext 

db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1" 
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2" 

db2.SaveChanges() 
db3.SaveChanges() 

これらのコードのみが異なるSQLにLINQと比較して、私は、各メソッドが反応するもの 参照する例をもたらす 彼らの文脈で。 LINQ to SQLでは、2番目のSubmitChangesは"Row not found or changed"の例外が発生します。ですが、EFでは変更を無視して行を2回変更し続けますが、同時実行性を考慮する必要があるため、これは悪いと思います。

+0

HTH ジュリー(http://msdn.microsoft.com/en-us/library/bb386976.aspx)。 Linq to Entities(http://msdn.microsoft.com/en-us/library/bb386964.aspx)のLINQの他の味は、EF、[Linq to XML](http: /msdn.microsoft.com/en-us/library/bb387098.aspx)、ye olde [Linq to Objects](http://msdn.microsoft.com/en-us/library/bb397919.aspx)および他の多くの味。 –

+0

ありがとう、はい、あなたはそれについて完全に正しいです、それは真夜中だったので完全に私のせいではありませんでした;) – GtEx

+0

私は2番目の質問を削除して、ここに置きます:http://stackoverflow.com/questions/4690397/entity-フレームワーク4-ctp-5-unlike-queries-in-linq-to-sql – GtEx

答えて

9

最初の比較に注目して、LINQ to SQLではデフォルトでオプティミスティックな並行性チェックを行っていると思います。 IN EFでは、並行性をチェックするプロパティを明示的にマークする必要があります。あなたはNameプロパティのためにそれをしなかった可能性が高いので、EFは別のデータベースコマンドで製品名を変更した人が気にしません。

これは具体的にはコードの最初の動作ではなく、EF全体の動作であることを指摘したいと思います。エンティティデータモデルを作成する場合は、同時性チェックのためにプロパティにexpclitilyマークを付けなければなりません。

流暢なAPIを使用している場合は、プロパティに設定する属性としてIsConcurrencyTokenを探します。アノテーションを使用している場合は、ConcurrencyCheckAttributeを参照してください。あなたは[LINQ to SQLの]を言うべき

関連する問題