我有2个表Orders
和OrderDetails
。 Order
表具有一个身份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; }
}
当我插入记录时,我想获取Order
表的主键以在OrderDetail
表列中使用。我在一个电话中插入记录。如果出现故障,我想将插入回滚到两个表中。
答案 0 :(得分:0)
如果使用数据库生成的ID(例如MS SQL中的IDENTITY),则只需将实体添加到ObjectSet并在相关的ObjectContext上保存SaveChanges。 ID将自动为您填充。
using (var context = new MyContext())
{
context.MyEntities.AddObject(myNewObject);
context.SaveChanges();
int id = myNewObject.Id;
}
每个带有Entity框架的插入后均带有Select SCOPE_IDENTITY(),该函数将为新插入的记录返回自动生成的ID。
但是,在将更改保存到数据库之前,您无法获得自动生成的ID。如果您想在一个事务中完成所有操作,我建议您通过使用事务编写自定义存储过程将记录插入数据库。