データベースに入力したいオブジェクトの配列があります。私のメソッド呼び出しは次のようになります。
public void Add(CardElement[] cardElements){
foreach (var cardElement in cardElements)
{
Data.Entry(cardElement).State = System.Data.EntityState.Added;
}
Data.SaveChanges();
}
データベーステーブルはこれに似ています
MS SQL = Table mytable Columns a,b,c,d,e,f
Unique Constraint a,b,c
挿入したいデータはこれに似ています。
var obj [] = new [] {
new MyObject () { a = 1, b =1, c = 1 },
new MyObject () { a = 1, b =1, c = 2 }
new MyObject () { a = 1, b =1, c = 3 }
};
したがって、これらの3つの行をデータベースに追加する前に、データベースでこれらの3つの行を確認したいと思います。
私は次のようなことをすることができますが、これはデータベースへの余分なトリップを引き起こすはずだと思います。
private bool checkExists()...
foreach (var cardElement in cardElements)
{
var exists = (from ce in Data.CardElements
where ce.CardId == cardElement.CardId
where ce.Area == cardElement.Area
where ce.ElementName == cardElement.ElementName
select ce).Any();
if(exists return true)
}
return false
- では、どうすればこれをより優雅に処理できますか?
- linqを使用してこれを達成しようとする価値さえありますか?
- パフォーマンスのためにいくつかのストアドプロシージャを作成する必要がありますか?