2011-12-09 50 views
4

我更喜欢创建我自己的数据库,设置索引,唯一的约束等。从数据库生成域模型与edmx实体框架设计器是一致的。实体框架4 DB-First依赖注入?

现在我有兴趣使用依赖注入来设置一些存储库。我已经看过一些关于StackOverflow的文章和帖子,似乎专注于代码优先的方法。如何创建一个通用资源库来处理CRUD并使用依赖注入来选择实现细节,这非常漂亮。

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

有没有人有任何资源,他们可以指示我如何在使用db-first/code generation技术时使用依赖注入?

回答

10

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

通过一个通用的存储库模式,如发现的一个存储库模式here,IRepository接口是您注入ViewModels/Controllers/Whatever的东西。

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

我们目前正在用EF4 DB-first和上面链接的存储库模式做同样的事情,并且它工作得非常好。

+0

神奇的文章。希望我能早日找到它! – Sam