Breeze:EFContextProvider/Breeze控制器和服务层

Breeze:EFContextProvider/Breeze控制器和服务层,breeze,asp.net-web-api,service-layer,Breeze,Asp.net Web Api,Service Layer,使用Breeze时,我想知道如何将其与处理电子邮件通知、审核日志、业务验证(即客户必须存在)等事务的服务层集成 例如,给定以下场景: public class SalesAppRepository { private readonly EFContextProvider<SalesAppContext> _contextProvider; public SalesAppRepository(EFContextProvider<SalesAppContext&g

使用Breeze时,我想知道如何将其与处理电子邮件通知、审核日志、业务验证(即客户必须存在)等事务的服务层集成

例如,给定以下场景:

public class SalesAppRepository
{
    private readonly EFContextProvider<SalesAppContext> _contextProvider;

    public SalesAppRepository(EFContextProvider<SalesAppContext> contextProvider)
    {
        _contextProvider = contextProvider;
    }

    private SalesAppContext Context { get { return _contextProvider.Context; } }

    public string MetaData
    {
        get { return _contextProvider.Metadata(); }
    }

    public SaveResult SaveChanges(JObject saveBundle)
    {
        return _contextProvider.SaveChanges(saveBundle);
    }

    public IQueryable<Customer> Customers
    {
        get { return Context.Customers; }
    }

    public IQueryable<Order> Orders
    {
        get { return Context.Orders; }
    }

   /* Other entities */
}

[BreezeController]
public class BreezeController : ApiController
{
    private readonly SalesAppRepository _repository; 

    public BreezeController(SalesAppRepository repository)
    {
        _repository = repository;
    }

    [HttpGet]
    public string Metadata()
    {
        return _repository.MetaData;
    }

    [HttpPost]
    public SaveResult SaveChanges(JObject saveBundle)
    {
        return _repository.SaveChanges(saveBundle);
    }

    [HttpGet]
    public IQueryable<Customer> Customers()
    {
        return _repository.Customers;
    }

    [HttpGet]
    public IQueryable<Order> Orders()
    {
        return _repository.Orders;
    }

    /* Other entities */
}
公共类SalesAppLocatory
{
私有只读EFContextProvider\u contextProvider;
public SalesApprovitory(EFContextProvider contextProvider)
{
_contextProvider=contextProvider;
}
私有SalesAppContext上下文{get{return\u contextProvider.Context;}}
公共字符串元数据
{
获取{return _contextProvider.Metadata();}
}
public SaveResult SaveChanges(JObject saveBundle)
{
return\u contextProvider.SaveChanges(saveBundle);
}
公众可查询客户
{
获取{return Context.Customers;}
}
公共可撤销命令
{
获取{return Context.Orders;}
}
/*其他实体*/
}
[BreezeController]
公共类控制器:ApiController
{
私有只读SalesAppLocatory存储库;
公共BreezeController(SalesAppLocatory存储库)
{
_存储库=存储库;
}
[HttpGet]
公共字符串元数据()
{
返回_repository.MetaData;
}
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return\u repository.SaveChanges(saveBundle);
}
[HttpGet]
公众可查询客户()
{
返回_repository.Customers;
}
[HttpGet]
可供查询的公共订单()
{
返回_repository.Orders;
}
/*其他实体*/
}
在创建、修改实体时,我有一些其他业务逻辑。。例如,创建订单时;客户必须能够下订单(bool value
canOrder
),并且必须存在,还必须发送电子邮件并更新审核日志以显示新创建的订单。这只是一个场景,在我的服务层中通常存在其他情况,但我不确定如何将其与breeze结合起来

我知道我可以覆盖
SalesAppContext
上的
SaveChanges
方法来生成审核日志,但其他情况如何?我不确定我会把这个放在什么地方

编辑
我似乎已经找到了一种解决这个问题的方法,尽管这种方法很粗糙,但我上传了一个要点,希望能够帮助他人或改进:

我已经将我的业务逻辑合并到beforeSaveEntities(…)方法中:

如何确定传入的实体,然后根据该实体进行验证?如果你有很多实体,那么这个方法可能会变得非常混乱?请看我在这里的片段:也许有人有一个如何重构它的技巧,这样它就不会变得那么混乱…看起来不错。如果我的项目越来越大,我会考虑这种方法。谢谢分享:)