实体框架4 DB-First依赖注入?

时间:2011-12-09 16:44:59

标签: c# asp.net entity-framework dependency-injection

我更喜欢创建自己的数据库,设置索引,独特的约束等。从数据库生成域模型与edmx实体框架设计器相关。

现在我有兴趣使用依赖注入建立一些存储库。我查看了StackOverflow上的一些文章和帖子,似乎专注于代码优先方法。如何创建一个通用的存储库来处理CRUD并使用依赖注入来选择实现细节是非常光滑的。

我想做同样的事情,但似乎edmx进程生成的域模型继承了具体的类而不是实现接口(ObjectContext / ObjectSet而不是IObjectContext / IObjectSet)。

在使用db-first /代码生成技术时,有没有人能够指出我如何使用依赖注入?

2 个答案:

答案 0 :(得分:10)

也许我误解了你的问题,但是EDMX生成继承自ObjectContext的代码这一事实并不能阻止你使用依赖注入。听起来您担心无法将您的ObjectSet注入您的存储库,但这不是它的设计使用方式。

使用通用的存储库模式,例如找到here的存储库模式,IRepository接口就是您注入ViewModels / Controllers / Whatever的东西。

因此,您不会将IObjectContext或IObjectSet注入您的存储库;相反,您将IRepsoitory注入需要它的类中,并提供使用ObjectSet的IRepository接口的实现。然后,您可以模拟您的IRepository接口进行测试,或切换到完全不同的具体存储库实现,而不会影响您的任何其他代码。

我们目前正在使用EF4 DB-first以及上面链接的存储库模式执行完全相同的操作,并且它运行得非常好。

答案 1 :(得分:1)

我自己一直在研究这个问题的答案,我得到了这个解决方案: DBContext generator tutorial在首先使用数据库创建实体模型后生成POCO模型。

之后,实现非常简单,因为这与CodeFirst Repository& DI模式非常相似Repository & DI (IoC) patterns