如何在各种ORM(实体框架和Dapper)之间创建抽象层?

时间:2017-10-04 07:38:58

标签: c# entity-framework dapper abstraction asp.net-core-2.0

我想在实体框架和Dapper之间创建抽象层。在运行时,我可以选择实体框架或Dapper,或者我也将选择它们。我知道我可以使用界面

public IORM{
    Save();
    Delete();
    //other ORM functions
}

public EntityFramework : IORM{
    public Save(){
    SaveChanges();
    }
    public Delete(){
    Remove();
    }
}


public Dapper: IORM{
    public Save(){
    //save code goes here
    }
    public Delete(){
    //delete code goes here
    }

但这是基本操作,不知道如何在.net core 2.0 CofigureServices()方法中进行配置。

  

不同ORM之间的抽象是否可取?如果是的话怎么样   在.net中实现Entity框架和Dapper之间的抽象层   核心2.0?

1 个答案:

答案 0 :(得分:4)

始终建议将问题分开。但是,一个完整的ORM可以隐藏在一个接口定义背后,这是一种幻觉。 ORM的运行时行为可能会对整个应用程序产生相当大的影响,并且需要大量工作才能实现“交换”#34; ORM。维持这种能力的理由不是很多。 你背后的动机是什么?

当然,抽象具体的ORM工作是个好主意。具体的例子真的取决于你的整体架构,但提到一些要点:

  • 将持久性内容(属性,依赖项)保留在模型和控制器之外。
  • 应用存储库模式并将存储库接口参数注入到应用程序服务中。这样,您可以隐藏ORM的具体查询/写入操作。
  • 应用工作单元模式,并使用Web框架基础结构按请求透明地处理工作单元。这样,您可以隐藏ORM的具体事务处理操作。