2009-05-27 73 views
13

在我的ASP.NET应用程序中,我想使用Entity framweok通过数据访问层实现,因此我可以将其用作ORM工具。但我不希望应用程序的其余部分关心我正在使用它,或者受到任何实体框架特定的信息的污染。使用实体框架作为数据访问层

我似乎无法找到任何人在他们的数据访问层中独占使用实体框架,所以我很想看到任何在线的这个/经验人的例子。

+0

Stackoverflow的DAL:http://blog.stackoverflow.com/2008/09/what-was-stack-overflow-built-with/ – 2010-04-21 19:21:54

回答

2

我已经使用实体框架作为我最后两个项目的数据访问。这些对于数百张桌子来说是很大的(对我来说至少)项目,5-15名开发者持续一年以上。

在这两个项目中,我们都有一个WCF接口进入我们的服务层。我们不想在我们的WCF合同中使用实体框架对象。因此,我们创建了数据传输对象,并且我们映射了DTO和实体框架对象。

这打破了依赖关系,并保持合约尽可能稳定,但创造了一些额外的工作。

根据您的时间范围,我会这样做,或者在Kieth提到的下一个版本中使用POCO对象。

2

EF或任何其他ORM(即NHibernate)不会取代您的数据访问层。相反,ORM是从DAL到数据源的抽象层。

不要被愚蠢地认为EF取消了DAL。 EF只是另一个数据源框架。但是,在最佳实践中,您仍然想要抽象并集中共同DAL中的所有访问(读/写)。

这是我说话的完美例子。假设你必须在你的一个用例中删除一个给定的用户。但是,在删除用户时,您可能需要删除与已删除用户关联的其他记录以避免孤立记录(老实说,我会使用存储的proc来执行此操作)。现在这个用例被卡在一些非常特定于这个用例的BO中,并且因为用户只是总用例的一部分而被删除。

在某个时间点,您有一位开发人员被要求整合不同的使用案例,涉及的事件涉及删除用户!开发人员可能会做一些事情。 1)他可能会创建一个新的用例,该用例现在涉及删除用户,但忘记删除该用户的任何关联记录。 2)他可能已经注意到了以前的用例,但不能直接使用它,而不会将其用于用例,因此他决定将该用例的一部分正确删除用户及其相关记录,并将其复制到他的用例中。现在我们有重复部分的代码,几乎做同样的事情 - 删除用户。育!现在,把这个'删除用户'称为DAL。用户助手类,可以避免这种糟糕的设计实践。

无论如何,关于EF的一件好事,它减少了我手动创建的业务实体的数量,并且从应用程序级别提供不同于数据存储级别数据的视图。