Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#所有服务均可访问的全局方法_C#_Entity Framework - Fatal编程技术网

C#所有服务均可访问的全局方法

C#所有服务均可访问的全局方法,c#,entity-framework,C#,Entity Framework,在我的项目中,我有很多获取和操作数据的服务 我想从每个服务访问一个方法,该方法基本上查询一个日志表,以获取实体的创建者/最后一个编辑器 注入/引用此方法的最佳方式是什么 例如,在我的SalesOrderService中,我有以下方法: public void GetSalesOrder(int salesOrderId) { SalesOrder salesOrder = _context.SalesOrder.Where(o => o.SalesOrderId =

在我的项目中,我有很多获取和操作数据的服务

我想从每个服务访问一个方法,该方法基本上查询一个日志表,以获取实体的创建者/最后一个编辑器

注入/引用此方法的最佳方式是什么

例如,在我的SalesOrderService中,我有以下方法:

public void GetSalesOrder(int salesOrderId)
    {
        SalesOrder salesOrder = _context.SalesOrder.Where(o => o.SalesOrderId == salesOrderId).FirstOrDefault();
        //Insert into my view model here
    CreatedBy = GetCreator("SalesOrder",salesOrderId);

    }

如何生成和引用使用GetCreator方法查询日志的服务?

如果所有受影响的表要么继承自单个基类,要么实现相同的接口,那么您可以在基类或扩展方法上使用具体方法,以便只编写一次实现,但是要流利地使用它

EF中的一些任务(如审计跟踪)可以单独使用命名约定来实现,但是,即使您将使用约定来执行逻辑,您仍然应该使用接口来执行约定,将其转化为规则,而不是一般准则

用法示例

public void GetSalesOrder(int salesOrderId)
{
    SalesOrder salesOrder = _context.SalesOrder.Where(o => o.SalesOrderId == salesOrderId).FirstOrDefault();
    //Insert into my view model here
    CreatedBy = salesOrder.GetCreator();
}

当然,做同一件事有完全不同的方法,但是有了一个接口,通过IoC、T4脚本或其他自动化逻辑进行目标定位就简单多了。

您使用的是哪个IoC容器?您能详细说明一下吗?你想做什么还不清楚。一个简化类似任务但仍允许高度定制的解决方案是使用T4脚本从数据模型类生成上下文,使用属性和接口约定有效地“填补空白”。这对我来说非常有效。
public void GetSalesOrder(int salesOrderId)
{
    SalesOrder salesOrder = _context.SalesOrder.Where(o => o.SalesOrderId == salesOrderId).FirstOrDefault();
    //Insert into my view model here
    CreatedBy = salesOrder.GetCreator();
}