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