除了 dbml 文件之外,您还可以使用 DAL 做啥

Posted

技术标签:

【中文标题】除了 dbml 文件之外,您还可以使用 DAL 做啥【英文标题】:What more you can do with your DAL other than dbml file除了 dbml 文件之外,您还可以使用 DAL 做什么 【发布时间】:2011-07-18 15:40:41 【问题描述】:

注意:我不是专家,所以如果您觉得这个问题很愚蠢/蹩脚,请原谅并注意您的业务。 :)

好的,正如所有视频教程所述,创建一个 LinqToSqlClasses 项 (dbml) 文件。拖动表格,我们就完成了。

但在我的情况下(或者可能在所有现实世界的场景中),我们需要数据访问层提供的不仅仅是自动生成的类,对吧?

例如:在一个简单的会计软件中:我有一个 Accounts 表和一个 AccountingTransactions 表,

现在要获取任何帐户的分类帐,我们需要编写一个相当冗长的 sql 查询,试算表、日记账和单一凭证等也是如此。

我们可以在 DAL 中做些什么来优化这些查询以获得最佳性能。

【问题讨论】:

【参考方案1】:

我建议使用实体框架而不是 Linq to SQL。

但是在这两种情况下,您都可以使用 Linq 进行此类查询。此外,这为您提供了更好的设计器支持(智能感知、强类型、编译时检查)

EF 或 LinqToSQL 成为较低级别的 DAL,在此之上,您可以使用存储库模式以松散耦合的方式调用您的数据对象。如果需要封装,您还可以为某些存储库添加特殊方法以特定方式查询数据。

您应该使用 Entity Framework 或 LinqToSql 搜索存储库模式,您会发现几个实现。

看到这个答案: Advantage of creating a generic repository vs. specific repository for each object?

【讨论】:

以上是关于除了 dbml 文件之外,您还可以使用 DAL 做啥的主要内容,如果未能解决你的问题,请参考以下文章

除了实例化 DAL 的 BLL 之外,还有啥选项允许在 n 层解决方案中进行单元测试,而不会将 DAL 暴露给 UI 或将 BLL 暴露给 DAL?

由 dbml 形成的数据访问层中的功能

在 SQL 版本之间可互换的 Linq dbml

一个 Linq to Sql - 多个 .DBML 文件或一个 .DBML 文件

游戏中心 URL 方案

而不是所有表上的插入触发器