【问题标题】:Entity Framework master-detail data entry without foreign key没有外键的实体框架主从数据输入
【发布时间】:2019-01-17 04:36:19
【问题描述】:

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

【问题讨论】:

  • 您是否遵循过任何 EF 教程,因为这是相当基本的东西、研究关系、外键和导航属性。那么如何插入记录
  • 我用过EF。主/细节插入对我来说是新的。我也试过谷歌。仍然没有运气。

标签: c# entity-framework master-detail


【解决方案1】:

如果您使用 DB 生成的 Id(如 MS SQL 中的 IDENTITY),您只需将实体添加到 ObjectSet 并在相关 ObjectContext 上保存更改。系统会自动为您填充 ID。

using (var context = new MyContext())
{
  context.MyEntities.AddObject(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id;
}

使用 Entity 框架的每个插入都后跟 Select SCOPE_IDENTITY(),它返回自动生成的新插入记录的 ID。

但是,在将更改保存到数据库之前,您无法获取自动生成的 ID。如果您想在单个事务中完成所有操作,我建议您通过使用事务编写自定义存储过程将记录插入数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2011-04-29
    • 2011-07-20
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2018-09-24
    相关资源
    最近更新 更多