3

SQL Serverには、2つの列(AbsoluteCounter、TimeMfrAudit)に基づく一意のキー制約があります。Entity Frameworkを介してオブジェクトのリストを追加しようとした場合、コンテキスト全体を作成する例外をスローせずに、オブジェクトの1つがこの制約に違反するかどうかを確認するにはどうすればよいですか?SaveChanges()は失敗しますか?ここでベストプラクティスを探しています。

ありがとう

4

1 に答える 1

1

これらは、一意のキー制約に違反するすべてのオブジェクトになります。

var violatingObjects = listOfObjectsToAdd
    .Where(o => context.Objects.Any(oInDb =>
        oInDb.AbsoluteCounter == o.AbsoluteCounter &&
        oInDb.TimeMfrAudit == o.TimeMfrAudit))
    .ToList();

これはEXISTS、リスト内のオブジェクトごとに 1 つのデータベース クエリです。制約に違反する最初のオブジェクトのみを知りたい場合は、 のFirstOrDefault()代わりに使用しToList()ます。違反しているオブジェクトがあるかどうかだけを知りたい場合は、Any()代わりにToList(). 最初のオブジェクトが見つかったら、反復を停止する必要があります。

于 2013-01-07T17:39:44.160 に答える