我有两张桌子Orders & OrderDetails。Order表具有一个identity ID列作为其主键。OrderDetails表将Order表的主列作为一列。
我不能使用外键。
public class Order
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }
public DateTime OrderDate { get; set; }
}
public class OrderDetail
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }
public long OrderID { get; set; }
public long ItemID { get; set; }
public decimal Quantity { get; set; }
}当我插入记录时,我希望获得要在OrderDetail表列中使用的Order表的主键。我要在一次调用中插入记录。如果某些操作失败,我希望将插入操作回滚到两个表中。
发布于 2019-01-17 16:28:51
如果您使用的是DB生成的in (如MS中的IDENTITY ),则只需将entity添加到相关ObjectContext上的ObjectSet和SaveChanges中。系统将自动为您填写Id。
using (var context = new MyContext())
{
context.MyEntities.AddObject(myNewObject);
context.SaveChanges();
int id = myNewObject.Id;
}每个带有实体框架的插入后面都跟有Select SCOPE_IDENTITY(),它为新插入的记录返回自动生成的Id。
但是,在将更改保存到数据库之前,您无法获得自动生成的Id。如果您希望在单个事务中完成所有这些操作,我建议您通过使用transaction编写一个自定义存储过程来将记录插入到DB中。
https://stackoverflow.com/questions/54229124
复制相似问题