我一直在浏览关于导航属性,级联删除等的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
并从OrderDetail
中删除所有SaveMap
个对象,因为数据库将负责删除子实体。< / p>
问题
当我创建OrderDetail
个对象时,这些对象会被正确地添加到数据库中,我的Breeze客户端成功地设法读取它们并正确关联它们。但是,当我按Order
删除order.entityAspect.setDeleted();
对象时,子OrderDetails
会与已删除的父Order
一起发送到服务器。问题是OrderDetails
实体OrderId
属性设置为0.这引发了一个大问题,因为我无法确定要从OrderDetail
中删除哪个SaveMap
对象
答案 0 :(得分:1)
在服务器上,EntityInfo.OriginalValuesMap
将包含已删除订单ID的原始值。