【问题标题】:EF 4.3 - Update entity and sub entitiesEF 4.3 - 更新实体和子实体
【发布时间】:2013-01-09 17:51:57
【问题描述】:

我有一个带有子实体 OrderDetail 的实体 Order。我想更新订单并添加一个新的 OrderDetail。我该怎么做?

我尝试将订单的状态设置为已修改,但出现此错误:

发生了参照完整性约束冲突:定义参照约束的属性值在关系中的主体对象和依赖对象之间不一致。

更新: 添加新的 OrderDetail 后,我想更新作为主键一部分的订单类型。我尝试将 OrderDetail 的状态设置为已修改,但出现新错误:

存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。

【问题讨论】:

    标签: entity-framework entity-framework-4.3


    【解决方案1】:

    在将Order 设置为Modified 之前,先尝试将新的OrderDetail 置于Added 状态:

    var newOrderDetail = order.OrderDetails.First();
    context.Entry(newOrderDetail).State = EntityState.Added;
    context.Entry(order).State = EntityState.Modified;
    

    这可能有效 - 也可能无效,具体取决于您的模型和场景的详细信息...

    【讨论】:

    • 这适用于新创建的 OrderDetail 但修改了部分主键,如果我将状态设置为已修改则不起作用。
    • @sysboard:您无法使用 EF 修改现有实体的主键属性。关键是 EF 用于在数据库中查找要更新的行的标识。如果您更改键 EF 不再找到您要更新的行。您只能使用直接 SQL 执行密钥更改。
    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2015-01-26
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多