C# 一对多删除-子实体FKs设置为0

C# 一对多删除-子实体FKs设置为0,c#,javascript,breeze,C#,Javascript,Breeze,我已经阅读了有关导航属性、级联删除等的Breeze文档。我已经成功地通过cascade deletes和Breeze实现了一对多的关系。关于下面的代码是如何失败的,我已经没有什么想法了,如果有任何帮助,我们将不胜感激 下面的代码看起来类似于DocCode文档中的Order和OrderDetail类: public class Order { public int OrderId { get; set; } public String Title { get; se

我已经阅读了有关导航属性、级联删除等的Breeze文档。我已经成功地通过cascade deletes和Breeze实现了一对多的关系。关于下面的代码是如何失败的,我已经没有什么想法了,如果有任何帮助,我们将不胜感激

下面的代码看起来类似于DocCode文档中的
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);
        }
}
公共类秩序
{
公共int-OrderId{get;set;}
公共字符串标题{get;set;}
公共虚拟ICollection OrderDetails{get;set;}
}
公共类OrderDetail
{
public int OrderDetailId{get;set;}
公共字符串注释{get;set;}
公共int-OrderId{get;set;}
[外键(“订单ID”)]
[反向属性(“订单详细信息”)]
公共秩序{get;set;}
}
公共类MyDbContext:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
//使用单数表名
modelBuilder.Conventions.Remove();
modelBuilder.Entity()
.HasMany(t=>t.OrderDetails)
.WithRequired(t=>t.Order)
.HasForeignKey(t=>t.OrderId)
.WillCascadeOnDelete();
基于模型创建(modelBuilder);
}
}
当删除
Order
实体时,我会截取
beforecavechanges
并从
SaveMap
中删除所有
OrderDetail
对象,因为DB将负责删除子实体

问题
当我创建
OrderDetail
对象时,这些对象被正确地添加到数据库中,我的Breeze客户端成功地读取并正确地关联了这些对象。但是,当我通过
Order.entityAspect.setDeleted()删除
Order
对象时
,子项
OrderDetails
将与其已删除的父项
Order
一起发送到服务器。问题是
OrderDetails
实体
OrderId
属性设置为0。这引发了一个大问题,因为我无法确定要从服务器上的
EntityInfo.OriginalValuesMap
保存映射中删除哪个
OrderDetail
对象。OriginalValuesMap将具有已删除订单ID的原始值

您确定
[ForeignKey(“OrderId”)]
属性应该标记Order属性而不是OrderId属性吗?“OrderId”和“OrderDetails”中的空格看起来可疑,我认为应该在“Order”上。将其设置为“OrderId”会出现错误谢谢Jay,我如何才能避免所有这些?也就是说让Breeze帮我保留那些身份证?或者这是默认的微风行为?这是默认的行为。其思想是,当您删除外键指向的实体时,我们应该将外键值设置回其“默认”值(通常为0或null)。这就是说,我们已经考虑将其配置为可配置。如果您认为这很有用,请发布到用户语音。我现在可以从服务器端的
SaveMap
中删除这些内容。如何告诉我的客户机忘记服务器上已删除的
OrderDetails
(通过级联删除自动删除)?您需要在保存完成之前或之后自己在客户机上执行此操作。还有一个与此相关的用户语音请求:。如果你觉得这是个好主意,请投它一票。我刚刚投了:)非常感谢你的帮助。如果其他人需要的话,我会尝试写博客。