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

时间:2014-01-18 19:00:12

标签: 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并从OrderDetail中删除所有SaveMap个对象,因为数据库将负责删除子实体。< / p>

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

1 个答案:

答案 0 :(得分:1)

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