EnityFramework的关注点分离
本文关键字:分离 关注点 EnityFramework | 更新日期: 2023-09-27 18:27:38
我最近开始进入EntityFramework,以便将我的模型自动映射到MySql数据库中。因此,我阅读了一些教程并开始测试以验证它们。一切都很好,因为我只有一个项目。如果我把解决方案分开,就会出现一些问题。为了演示这一点,我用EF6.1设置了一个控制台项目(让我们称之为a),将我的所有数据保存到数据库中。一切都很好。如果我现在创建第二个控制台项目(让我们称之为B),并通过IRepository Wrapper(来自a)使用DbContext,则会出现一些问题:
- 首先,我必须将数据库的配置数据和EF配置放入项目B的App.config中。我不喜欢这样,但我可以接受
- 此外,只要我没有在项目B中引用EntityFramework.SqlServer,应用程序就会编译,但会抛出异常
为了区分这些问题,我不希望项目B知道数据是通过EF存储在数据库中的。或者举一个真实世界的例子,我不希望我的WPF Gui知道数据来自数据库。
有解决这些问题的方法吗?我是错过了什么,还是在使用EF时不得不面对这个问题?
对于第一个问题,您不必将连接字符串放在程序集的配置文件中。您可以使用任何您喜欢的东西(您自己的config/ini文件、注册表等),然后将连接字符串传递给DbContext(connectionString)
构造函数。
至于第二个问题,这似乎取决于如何抽象数据库。如果它是一个完整的抽象,那么它不应该泄露对EntityFramework.SqlServer
的任何依赖关系。另一方面,实体框架本身已经遵循了存储库设计模式,所以我不太确定你是否需要在它上面添加另一个层。如果你确实想继续创建数据库抽象层,可以考虑将它放在第三个库项目中,供其他面向用户的应用程序项目参考。