したがって、論理的には機能するはずのこのコードがありますが、EntityFrameworkは予期しない動作をしています。
ここ:
foreach (SomeClass someobject in allObjects)
{
Supplier supplier = new Supplier();
supplier.primary_key = someobject.id;
supplier.name = someobject.displayname;
try
{
sm.Add(supplier);
ro.Created++;
}
catch (Exception ex)
{
ro.Error++;
}
}
これが私がsm.Add()に持っているものです
public Supplier Add(Supplier supplier)
{
try
{
_ctx.AddToSupplier(supplier);
_ctx.SaveChanges();
return supplier;
}
catch (Exception ex)
{
throw;
}
}
同じIDを持つallObjectsにレコードを含めることができます。私のコードはこれをサポートする必要があり、次のコードに進んで挿入してみてください。これでうまくいくと思います。
これが発生した場合、例外がスローされ、重複したPKを持つレコードは挿入できません(もちろん)。例外は、PKの値(たとえば1000 )に言及しています。
すべて順調です。これまで使用されたことのないPKを含む新しいサプライヤがsm.Add()に渡されます。(1001)
ただし、奇妙なことに、SaveChanges()を実行すると、EFは重複したPKを持つレコードを挿入できないことについて泣き言を言います。サプライヤのprimary_keyに1001が含まれている場合でも、例外は1000に言及しています。
これは私が_ctxを適切に使用していないことだと思います。同期するために他の何かを呼び出す必要がありますか?