3

Entity Framework 4 CTP 5に関する問題があります。これはLINQ to SQLがこれよりも優れていると認識していますが、 Code-First機能のためです。Entity Framework 4(CTP 5)は、LINQ-to-SQLと比較してわかりにくいクエリ

はそのタグで製品を想像してみて(または何と多くの関係に1):

は、だからここに私の問題です。 tblTagsは、一部のタグを削除し、ユーザーが一度にいくつかのタグを挿入することによって変更されます(ユーザーはそれらを完全に異なるものに変更する可能性があります)。 LINQとの比較のためのコードは:

です。私の意見では、簡単な考えですが、古いタグをすべて削除して新しいタグを挿入するだけです(簡単なことです)。 SQLへ

LINQ:

Dim oldTags = ctx.Tags.Where(Function(m) m.ProductID = pID) 
Dim newTags = 'from user input, like from the model which was posted, like in MVC' 

ctx.Tags.DeleteAllOnSubmit(oldTags) 
ctx.Tags.InsertAllOnSubmit(newTags) 

ctx.SubmitChanges() 

はEF 4 CTP5:

Dim oldTags = ctx.Tags.Where(Function(m) m.ProductID = pID) 
Dim newTags = 'from user input, like from the model which was posted, like in MVC' 
For Each item In oldTags 
    ctx.Tags.Remove(item) 
Next 
For Each item In newTags 
    ctx.Product.Add(item) 
Next 
ctx.SaveChanges() 

私が作るしようとしている点は次のとおりです。

  • LINQ to SQLでは、最初に 古いものを(データベースから削除する代わりに)更新しようとします。その後、余分なタグを挿入します。
  • しかし、Entity Frameworkの中に、それはそれぞれにつき1つのクエリを作成して送信「を削除」し、それぞれにつき1つの クエリは「を追加します」。

EFは更新を計算しませんが、実行するように指示します(これ以上は実行しません)。 SQLを介してたくさんのクエリを送信するので、何の理由もなく自分のオートナンバーの列が上がります。
私は2番目の問題についていくつかのロジックを行うことができることを知っています。それは、LINQ to SQLのほうが好きです。
しかし、私はクエリをSQLに渡すことについて何もしません。それは最適化されていないと思う。

I want コードファーストは、LINQ to SQLが現在持っているこれらの機能(コミット前に計算するもの)を組み合わせています。なにか提案を?私はEFコードで間違ったことをしましたか?または、RTMバージョンの変更をコミットする際にLINQ to SQLのようになりますか?あなたはこの動作に同意しない場合は

UPDATE
そう言うとコメントを残してください。
さらに詳しい情報が必要な場合は、いくつかの情報をお知らせください。

私はこの記事を更新します。私はまだ答えを待っています。御時間ありがとうございます。

答えて

1

あなたは、このためのバッチ操作を使用する必要があります。

SaveChanges(SaveChangesOptions.Batch); 

msdnで続きを読みます。

関連する問題