我有一个带有名为 Node 的表的 SQL 数据库。它有一个组合键:NodeId、DocId。两列都设置为标识规范 = 否。我在 Visual Studio 中生成了一个 EDMX,以将节点从 EF 保存到数据库。VS 生成的 Node 对象有两个字段设置为 StoreGeneratedPattern = None。我指定的 NodeId 已正确放入数据库中,但 DocId 是自动生成的。每次我插入一些新节点时,它们都会得到相同的 DocId。这是正确的,但它不是我在对象中指定的 DocId。这是一个自动生成的。我指定的 NodeId 已正确保存到数据库 - 此字段不会自动生成。我看不出这两个领域有什么区别。
这是我的代码:
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);
}
}
}
我究竟做错了什么?