c# - Breeze 一对多删除 - 子实体 FK 设置为 0

标签 c# javascript breeze

我已经阅读了有关导航属性、级联删除等的 Breeze 文档。我已经成功地通过级联删除和 Breeze 使一对多关系按预期工作。对于以下代码如何失败,我已经没有想法了,任何帮助将不胜感激。

下面的代码与 DocCode Breeze 文档中的 OrderOrderDetail 类类似:

public class Order
{
        public int OrderId { get; set; }
        public String Title { get; set; }
        public virtual ICollection<OrderDetail> OrderDetails { get; set; }
}

public class OrderDetail
{
        public int OrderDetailId { get; set; }
        public String Comment { get; set; }

        public int OrderId { get; set; }
        [ForeignKey("OrderId ")]
        [InverseProperty("OrderDetails ")]
        public Order Order { get; set; }
}

public class MyDbContext : DbContext
{
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            // Use singular table names
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();


            modelBuilder.Entity<Order>()
                        .HasMany(t => t.OrderDetails)
                        .WithRequired(t => t.Order)
                        .HasForeignKey(t => t.OrderId)
                        .WillCascadeOnDelete();

            base.OnModelCreating(modelBuilder);
        }
}

当删除 Order 实体时,我会拦截 BeforeSaveChanges 并从 SaveMap 中删除所有 OrderDetail 对象因为数据库将负责删除子实体。

问题 当我创建 OrderDetail 对象时,这些对象被正确添加到数据库中,并且我的 Breeze 客户端成功地读取这些对象并正确关联它们。但是,当我通过 order.entityAspect.setDeleted(); 删除 Order 对象时,子项 OrderDetails 会连同它们的值一起发送到服务器已删除父订单。问题是 OrderDetails 实体 OrderId 属性设置为 0。这引发了一个大问题,因为我无法识别要删除哪个 OrderDetail 对象来自SaveMap

最佳答案

在服务器上,EntityInfo.OriginalValuesMap 将具有已删除订单 ID 的原始值。

关于c# - Breeze 一对多删除 - 子实体 FK 设置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21208527/

相关文章:

javascript - 处理失败的 breezejs 保存

c# - 无法枚举 C# 中的 F# 列表列表

c# - 无法将类型 [具体] 隐式转换为 [接口(interface)]

c# - 如何获取 DataGridViewRowSelectedRowCollection 中的列

javascript - 使整个 div 可点击

javascript - 如何仅从 JavaScript 过滤器方法中获取前 100 个对象

javascript - 具有变化 View 的 Reactjs 组件

javascript - Breeze JS : what is a resource? 有多种资源吗?

breeze - 删除包含子实体的实体时 Breeze 出错

c# - 单击 ComboBox 的 TextBox 部分