Nodeというテーブルを持つSQL DBがあります。NodeId、DocId という組み合わせキーがあります。両方の列が Identity specification = No に設定されています。Visual Studio で EDMX を生成し、ノードを EF から DB に保存しました。VS が生成した Node オブジェクトには、StoreGeneratedPattern = None に設定された 2 つのフィールドがあります。指定した NodeId は正しく DB に配置されますが、DocId は自動生成されます。新しいノードを挿入するたびに、それらはすべて同じ DocId を取得します。これは正しいですが、オブジェクトで指定した DocId ではありません。自動生成されたものです。指定した NodeId は DB に正しく保存されます。このフィールドは自動生成されません。2 つのフィールドに違いは見られません。
これが私のコードです:
using (MyEntities db = new MyEntities())
{
// Delete old nodes using my own extension method
db.DeleteObjects(db.Nodes.Where(n => n.DocId == doc.DocId));
// Create EF doc object
Document newDbDoc = docDTO.ToDbDoc();
// Add new nodes using my own extension method
db.Nodes.AddObjects(newDbDoc.Nodes);
try
{
db.Connection.Open();
using (var transaction = db.Connection.BeginTransaction())
{
try
{
db.SaveChanges();
transaction.Commit();
return Json("Success");
}
catch
{
transaction.Rollback();
return Json("Error");
}
}
}
catch
{
return Json("Error");
}
}
私自身の拡張方法:
public static class ObjectContextExtensions
{
public static void DeleteObjects(this ObjectContext context, IEnumerable<EntityObject> entities)
{
foreach (var ent in entities)
{
context.DeleteObject(ent);
}
}
public static void AddObjects<TEntity>(this ObjectSet<TEntity> objectSet, IEnumerable<TEntity> entities) where TEntity : class
{
foreach (var ent in entities)
{
objectSet.AddObject(ent);
}
}
}
私は何を間違っていますか?