没有外键的实体框架主从数据输入

时间:2019-01-17 04:36:19

标签: c# entity-framework master-detail

我有2个表OrdersOrderDetailsOrder表具有一个身份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表列中使用。我在一个电话中插入记录。如果出现故障,我想将插入回滚到两个表中。

1 个答案:

答案 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。如果您想在一个事务中完成所有操作,我建议您通过使用事务编写自定义存储过程将记录插入数据库。