我已经阅读了有关导航属性、级联删除等的 Breeze 文档。我已经成功地通过级联删除和 Breeze 使一对多关系按预期工作。对于以下代码如何失败,我已经没有想法了,任何帮助将不胜感激。
下面的代码与 DocCode Breeze 文档中的 Order
和 OrderDetail
类类似:
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/