2

我有一个自定义上下文提供程序来在服务器端进行验证。现在我想硬删除一个客户实体及其所有子实体(地址、电子邮件等)

  1. 顾客
    • 地址
    • 电子邮件
    • ...

自定义上下文提供程序是检查和删除实体和引用的子实体的最佳方式吗?

编码:

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();
}

将被执行

4

1 回答 1

2

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

于 2013-06-17T18:06:41.390 回答