用实体框架分离关注点

时间:2014-10-22 15:41:16

标签: c# entity-framework separation-of-concerns

我最近开始进入EntityFramework,以便将我的模型自动映射到MySql数据库。所以我阅读了一些教程并开始测试以验证它们。一切正常,只要我有一个项目。如果我将解决方案分开,则会出现一些问为了证明这一点,我使用EF6.1设置了一个控制台项目(让我们称之为A),它将我的所有数据保存到数据库中。一切正常。如果我现在创建第二个控制台项目(让我们称之为B)并通过IRepository-Wrapper(来自A)使用DbContext,则会出现一些问题:

  1. 首先,我必须将数据库和EF配置的配置数据放入项目B的App.config中。我不喜欢这样,但我可以忍受这个。
  2. 此外,只要我不在项目B中引用EntityFramework.SqlServer,应用程序就会编译,但会引发异常。
  3. 为了区分问题,我不希望项目B知道数据是通过EF存储在数据库中的。或者举一个现实世界的例子,我不希望我的WPF Gui知道,数据来自数据库。

    这些问题是否有解决方法?我错过了什么,或者在使用EF时我是否必须忍受这个问题?

1 个答案:

答案 0 :(得分:0)

对于第一个问题,您不必强制将连接字符串放在程序集的配置文件中。您可以使用您喜欢的任何内容(您自己的config / ini文件,注册表等),然后将连接字符串传递给DbContext(connectionString)构造函数。

至于第二个问题,这似乎取决于你如何抽象数据库。如果它是一个完整的抽象,那么它不应该泄漏EntityFramework.SqlServer上的任何依赖。另一方面,Entity Framework本身已经遵循了存储库设计模式,所以我不确定你是否需要在它上面添加另一个层。如果您确实想继续创建数据库抽象层,请考虑将其放在第三个库项目中,而其他面向用户的应用程序项目将引用该项目。