我更喜欢创建自己的数据库,设置索引,唯一约束等。使用edmx实体框架设计器从数据库生成域模型是小菜一碟。
现在,我对使用依赖注入设置一些存储库很感兴趣。我看过StackOverflow上的一些文章和帖子,似乎把重点放在了代码优先方法上。如何创建一个通用的存储库来处理CRUD并使用依赖注入来选择实现细节,这是非常巧妙的。
我也想做同样的事情,但似乎edmx进程生成的域模型继承了具体的类,而不是实现接口(ObjectContext/ObjectSet与IObjectContext/IObjectSet相对)。
在利用db-first/代码生成技术时,有没有人可以告诉我如何使用依赖注入?
发布于 2011-12-10 00:59:25
也许我误解了您的问题,但是EDMX生成继承自ObjectContext的代码这一事实并没有阻止您使用依赖注入。听起来您很担心无法将ObjectSet注入到存储库中,但这并不是设计使用它的方式。
使用一个通用的存储库模式,比如找到here,IRepository接口就是您注入到视图模型/控制器/任何东西中的东西。
因此,您不必将IObjectContext或IObjectSet注入存储库;而是将IRepsoitory注入到需要它的类中,并提供使用ObjectSet的IRepository接口的实现。然后,您可以模拟IRepository接口进行测试,或者切换到完全不同的具体存储库实现,而不会影响任何其他代码。
我们目前正在使用EF4 DB-first和我上面链接的存储库模式做同样的事情,它工作得非常好。
发布于 2013-02-19 08:55:42
我自己一直在研究这个问题的答案,我得到了这个解决方案:首先用数据库创建实体模型,然后用DBContext generator tutorial生成POCO模型。
之后,实现非常简单,因为这非常类似于CodeFirst存储库&DI模式Repository & DI (IoC) patterns
https://stackoverflow.com/questions/8448791
复制相似问题