在我的ASP.NET应用程序中,我想使用Entity framweok通过数据访问层实现,因此我可以将它用作ORM工具。但是我不希望应用程序的其余部分关心我正在使用它或者被实体frameowrk特定的任何东西污染。
我似乎无法找到任何人在他们的数据访问层中专门使用实体框架,所以我很想看到任何在线人们有这种/体验的例子。
答案 0 :(得分:4)
http://ayende.com/Blog/archive/2007/06/08/Rhino-Commons-RepositoryltTgt-and-Unit-Of-Work.aspx
查看上面的示例,您可以使用存储库模式
以相同的方式实现实体框架答案 1 :(得分:4)
您可以使用像ScottGu在NerdDinner系列中使用Linq那样的存储库模式来抽象实体框架。
答案 2 :(得分:3)
这是DDD灵感的架构,我刚刚使用EF v4,它使用Unity IoC注入EF存储库,希望有所帮助
答案 3 :(得分:2)
我在前两个项目中使用了Entity Framework作为数据访问。这些是大型的(至少对我而言)项目有数百个表,5-15个开发人员持续一年以上。
在这两个项目中,我们的服务层都有一个WCF接口。我们不想在WCF合同中使用Entity Framework对象。因此,我们创建了数据传输对象,并在DTO和Entity Framework对象之间进行映射。
这会破坏依赖关系,并使合同尽可能稳定,但会产生一些额外的工作。
根据您的时间范围,我会这样做或者在下一版本中使用POCO对象,如Kieth所述。
答案 4 :(得分:2)
EF或任何其他ORM(即NHibernate)不会取代您的数据访问层。相反,ORM是从DAL到数据源的抽象层。
不要误以为EF取消了DAL。 EF只是另一个数据源框架。但是,在最佳实践中,您仍然希望在公共DAL中抽象和集中所有访问(读/写)。
这是我正在谈论的一个完美的例子。假设您必须在某个用例中删除给定用户。但是,删除用户时,您可能希望删除与已删除用户关联的其他记录以避免孤立记录(老实说,我会使用存储过程)。现在这个用例卡在一些特定于此用例的BO中,并且因为用户只是整个用例的一部分而被删除。
在某个时间点,您有一位开发人员被要求合并一个不同的用例,该用例涉及删除用户!开发人员可能会做一些事情。 1)他可能会创建一个新的用例,现在涉及删除用户但忘记删除该用户的任何相关记录。 2)他可能已经注意到以前的用例但是没有直接使用它而没有过于概括用于他的用例,所以他决定将用户及其相关记录中的部分用例复制到他的用例中。现在我们重复部分代码实际上做同样的事情 - 删除用户。育!现在,将这个“删除用户”放在DAL.Users助手类中,你可以避免这种糟糕的设计习惯。
无论如何,关于EF的一个好处是,它减少了我过去手动创建的业务实体的数量,并提供了与数据存储级别相比的应用程序级别的数据视图。