2012-02-25 10 views
0

への個別のヒットとして示す作業複数のインサートの単位:データベースへのシングルヒットを生成する必要がありますEF 4.3、私はこのコードを持っているDB

using (var context = new MyContext()) 
{ 
    var uow = new UnitOfWork(context); 
    var userService = new UserService(uow); 
    var gameService = new GameService(uow); 

    userService.AddUser(); 
    userService.AddUser(); 
    userService.AddUser(); 
    userService.AddUser(); 
    userService.AddUser(); 
    userService.AddUser(); 
    userService.AddUser(); 
    userService.AddUser(); 
    userService.AddUser(); 
    userService.AddUser(); 
    gameService.AddGame(); 
    uow.Commit(); 

    Console.Read(); 
} 

を。私はSQLプロファイラを見ていて、それは複数のヒットのように見えます(または間違っていますか?)。ここで、これはただの複数の挿入をスクリーンショット(私は何の影響もなかったテーブルに偽のデータを挿入されたテーブルの名前を気にしないでください)

enter image description here

示す場合、またはデータベースには、この別のヒットでいます?

EDIT:拡大写真は、私は一つの接続は、監査ログインを見て、その後、その後、1監査ログアウト11挿入文、開かれている参照here

+0

ヒットが分かれています。 1行を参照してください。これは、挿入されたもので、割り当てられたIdの選択です。つまり、1回のヒットです。私が知る限り、NHibernateは複数のクエリを1つのパッケージにまとめた唯一のormです(この共通のinsert-selectペアは別です)。 –

+0

@GertArnold - EFに複数のエンティを追加してコミットする方法はありませんか?私はそれがUnitOfWorkパターンの全体のポイントだと思った。 – Ryan

+0

1つのヒットを1つのステートメントとしてデータベースに送信すると考えると、EFは行コンストラクターを使用して1つのステートメントを作成する必要がありますが(SQL Server 2008で動作した場合)生成されたidは新しいオブジェクトに戻ります。 –

答えて

1

です。これはうまくいくはずです。何も間違っていません。なぜ彼は複数のヒットをしていると思いますか?あなたの謙虚な意見でヒットは何ですか:)

+0

私にとっては十分に良い:)私は、 'ヒット'を考慮した場合に監査が行われるかどうかは分かりませんでした – Ryan

+0

私はあなたがEFでこれを行うことはできないと誤解しました:( – Ryan

+0

あなたは挿入物それでは、「通常の」ビジネスアプリケーションの場合は、この方法を挿入するのが普通です。大量の挿入のために何らかの要件がある場合は、SSISまたは別のデータベーステクノロジNoSQLなどを使用してください) – rfcdejong

1

私はコメントを要約すると思った。

不幸にもEF 4.3はバルク操作をサポートしていません。推奨されるアプローチは、SqlBulkCopy explained hereを使用するか、アプリケーションがパフォーマンス重視の場合にNoSQLアプローチを使用することです。

関連する問題