【问题标题】:EF5 incrementing Unique ID without calling savechanges until user request to saveEF5 递增唯一 ID 而不调用 savechanges 直到用户请求保存
【发布时间】:2012-08-14 03:28:57
【问题描述】:

如何根据子表中的父表唯一id向一个表和子表中添加多个项目,而无需每次添加行时调用保存更改,只有当用户单击保存按钮时才必须提交更改

【问题讨论】:

  • 使用自动递增的列,EF 会为您处理。
  • 嗨,我首先从现有数据库中逆向工程代码,数据库表列 ID 设置为标识增量,但是您在表类中的哪个位置指定自动增量选项或属性
  • 你不会 - 这是整数键的默认值,但应用程序中的值不会自动递增,它们仅在保存更改后设置。
  • 那么如何在用户添加记录的情况下工作,然后为父记录添加子记录,其中父记录是子记录的外键,然后开始添加一个新的父记录,然后是子记录,在用户使用事务的应用程序中,只有在完成添加所有数据后才会提交

标签: entity-framework-4


【解决方案1】:

这取决于您定义实体的方式。如果您使用的是independent associations,它将简单地工作。

如果您使用外键关联,则必须为主体实体使用临时键,并将它们设置为依赖实体中的外键属性。 parent 中的这些临时键必须是唯一的(例如使用负值),EF 会在保存更改时自动将它们替换为实际值。

【讨论】:

  • 能否请您链接我从哪里获得此信息的文档?
【解决方案2】:

实体框架首先插入父记录并使用其自动递增的标识值来设置子项的任何外键值。 EF 可以这样做,因为 SQL 服务器会在事务范围内增加标识列,因此在事务尚未提交时分配新值。 (回滚后的新插入显示标识列缺少在回滚事务中分配的值。

所以做类似的事情是没有问题的

var cust = new Customer { ... };
context.Customers.AddObject(cust); // (or Add() with DbContext).
var ord = new Order  { ... };
ord.OrderLines.Add(new OrderLine  { ... });
cust.Orders.Add(ord);
context.SaveChanges();

其中... 是用于设置属性的占位符(无父 ID)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多