BreezeJS - 在自定义上下文提供程序中删除带引用的实体

时间:2013-06-16 19:25:49

标签: javascript entity-framework breeze

我有custom context provider在服务器端进行验证。 现在我想用他所有的子实体(地址,电子邮件等)来删除客户实体

  1. 客户
    • 地址
    • 电子邮件
    • ...
  2. 自定义上下文提供程序是检查和删除实体和引用的子实体的最佳方法吗?

    代码:

    class CustomContextProvider : EFContextProvider<CustomContext>
    {
        protected override bool BeforeSaveEntity(EntityInfo entityInfo)
        {
            switch (entityInfo.EntityState)
            {
                case EntityState.Deleted:
                    if (entityInfo.Entity.GetType() == typeof(Customer))
                    {
                        var customer = (Customer)entityInfo.Entity;
                        var customerDb = Context.Customers
                                         .FirstOrDefault(c => c.Id == customer.Id);
    
                        // my delete logic
                    }
                    break;
            }
            return true;
        }
    }
    

    并在客户端

    function deleteCustomer() {
           customer().entityAspect.setDeleted();
           return datacontext.saveChanges();
    }
    

    将被执行

1 个答案:

答案 0 :(得分:2)

这将有效,但您仍然会在客户端上将子项标记为未删除。一种方法是在SaveChanges调用的promise回调中“分离”客户端上的所有子实体。在这种情况下,分离它们可以很好地工作,因为您真正想要做的就是在客户端上忘记它们,因为您已经在服务器上删除了它们。这有意义吗?