哪个层应该托管LinqToSql实体文件 - 在我的案例中

时间:2010-07-16 12:14:38

标签: c# entity-framework architecture

所以我环顾四周,没有发现任何看起来像我在说什么, 我知道有些相似,但这是一个更具体的问题。

我正在家里做项目并使用实体框架作为我的ORM提供者, 当我们在我的工作场所从事项目时,我们使用NHibernate并且有所不同 DLL的设置为DM \ DAL \ BL等..其中实际的映射类和hbm文件在DM文件夹中设置,数据库连接仅在DAL层发生,所有项目都可以访问DM并使用模型移动东西,即UI-&gt ;-(WCF) - > BL-> DAL再返回。

我自己的项目有类似的设置,但是当我实际使用EF来映射我的数据库并查看它是如何工作的时候,似乎无论我在何处生成类,数据库连接也必须存在。

所以我的问题是我应该在哪里定位实体类和数据库连接?或者有没有办法将两者分开并仍然可以通过拖放来轻松生成类?

提前致谢!

2 个答案:

答案 0 :(得分:3)

这是一个相当普遍的问题。 ORM就像EF和LINQ to SQL一样,真正的“DAL” ORM层(它实际上是数据访问的重要组成部分)。是的,连接字符串之类的连接信息确实存在于模型级别,但是这种信息应该来自 bottom ,所以这不应该是任何实际后果的问题。

因此,要回答您的问题,只需将ORM实体放入自己的程序集中即可开始工作。

答案 1 :(得分:1)

还取决于您打算如何与实体保持“纯粹主义” - 如果您有多个关于“数据”的内存“视图”(例如DAL DTO,业务实体,WCF Wire中的DataContract类型实体,以及UI等的ViewModel数据然后将“DAL”实体留在DAL程序集中就可以了。

但是,一个常见的更快更脏的解决方案是在所有层中重复使用POCO(按照Adam) - 将它们拆分成单独的程序集,然后从任何层引用POCO。

使用Linq2SQL的AFAIK这是不可能的,因为实体紧密绑定到DataContext(意味着使用LINQ2SQL实体的所有层都需要引用'Dal' - 根本不是很漂亮)