【发布时间】:2014-01-30 23:39:57
【问题描述】:
我已经阅读了有关导航属性、级联删除等的 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 与它们删除的父Order 一起被发送到服务器。问题是OrderDetails 实体OrderId 属性设置为0。这引发了一个大问题,因为我无法确定要从SaveMap 中删除哪个OrderDetail 对象
【问题讨论】:
-
您确定
[ForeignKey("OrderId ")]属性应该标记Order 属性而不是OrderId 属性吗? "OrderId " 和 "OrderDetails " 中的空格看起来也很可疑 -
我认为它应该在“订单”上。将其设置在“OrderId”上会出现错误
标签: c# javascript breeze