私はEntityFrameworkコードの最初のアプローチを使用しています。これは、挿入および更新する方法です。
private void SaveCandidates(Container container, List<Candidate> candidates, bool isInsert)
{
var alreadyExists = false;
foreach (candidate matchingOrderCandidate in candidates)
{
alreadyExists = container.Candidates.Any(i => i.Id == candidate.Id);
if (!alreadyExists && isInsert)
{
container.Entry(candidate).State = EntityState.Added;
}
if (alreadyExists && !isInsert)
{
container.Entry(candidate).State = EntityState.Modified;
}
}
container.SaveChanges();
}
ただし、更新の場合は例外をスローします
[System.InvalidOperationException] = 同じキーを持つオブジェクトが既に ObjectStateManager に存在します。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。
最初に候補を挿入し、次にいくつかの自動プロセスが実行され、次にこのメソッドが更新のために呼び出され、更新の場合は で例外が発生しcontainer.SaveChanges()
ます。どんな助けでも非常に高く評価されます。