【发布时间】:2011-02-26 18:12:45
【问题描述】:
伙计们,
在标准的 3 层架构中,您会将 Linq2SQL dbml 文件放在哪里?
对于 ado.net 实体数据模型,您的答案是否相同?
如果dbml文件在中间层,那么你有数据层吗?
问候,
布雷特
【问题讨论】:
标签: .net linq-to-sql architecture entities n-tier-architecture
伙计们,
在标准的 3 层架构中,您会将 Linq2SQL dbml 文件放在哪里?
对于 ado.net 实体数据模型,您的答案是否相同?
如果dbml文件在中间层,那么你有数据层吗?
问候,
布雷特
【问题讨论】:
标签: .net linq-to-sql architecture entities n-tier-architecture
DBML 应该是数据层的一部分,而不是直接暴露给业务层。相反,最好公开获取和保存实体的方法,并将与持久性细节的交互隐藏起来(在本例中是 Linq2Sql,但通过抽象它,您可以稍后更改为 Linq2Entities 或其他任何东西而不会破坏您的应用程序)。
如果需要执行多个查询并稍微操作数据以创建实体,或者在保存时做额外的工作(处理子表的外键等),这也是一个很好的模型,因为它保留了那些对其他层隐藏的详细信息。
关于 Steven 的关于 L2Sql 的 cmets 没有很好地序列化,不幸的是,如果您使用 Linq2Sql 的构建器为您提供的开箱即用的东西。不过,部分类中的一些解决方法可以很容易地清除它。
【讨论】:
DBML 确实处于中间层。 LINQ to SQL 查询数据层(您的 SQL Server 数据库)。 LINQ to SQL 通常位于中间层的底层,您不会通过线路将 LINQ 发送到 SQL 实体(它们不能很好地序列化)。
使用实体框架,您的架构看起来很相似,除了 EF 允许通过网络发送域对象。尤其是随着与 EF 良好集成的新技术(如 OData)问世。
【讨论】: