惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
D
Docker
Jina AI
Jina AI
The GitHub Blog
The GitHub Blog
博客园 - 聂微东
B
Blog RSS Feed
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
爱范儿
爱范儿
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
Recent Announcements
Recent Announcements
U
Unit 42
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
量子位
Stack Overflow Blog
Stack Overflow Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 飞得更高

MPI并行编程系列之五:图的单源最短路径算法 MPI并行编程系列之四:KMP算法及并行化 MPI并行编程系列三:并行正则采样排序PSRS MPI并行编程系列 MPI并行编程系列二:快速排序 MPI并行编程系列一:枚举排序 c#基础(一)之内存管理 用Windows Live Writer 首发Blog 一个被我长期忽略的一个问题:验证控件与Button的OnClientClick事件 远程数据自动导入的设计与实现 LINQ TO SQL 复杂查询之Queries with local collections are not supported sql 常用函数总结 面对恶意操作,勇敢说不------定制服务器端验证器 验证控件失效,求助解决方案 js浮点运算bug的解决办法 从页面的生命周期事件到页面基类(PageBase类)的编写 c# 委托实例 回车与服务器控件Button的Click事件 javascript:Web页面中的所有控件清空 - 飞得更高 - 博客园
linq下数据库接口的定义和实现(linq to SQL)
飞得更高 · 2008-11-26 · via 博客园 - 飞得更高

    B/S系统典型的三层架构:业务逻辑层,数据访问层和UI显示层。为了实现业务逻辑层和数据访问层的松耦合,就要在业务逻辑层中定义数据库接口,并在数据访问层实现这些接口。

    linq的出现填平了对象世界和数据世界的鸿沟,把数据当对象,使我们操作数据就像操作对象一样简单。我们定义自己的业务实体类,在类中定义对这些实体数据的操作,将这些操作提交数据库。一切看上去是那么简单,但是,如何将这些实体类和数据库中的数据联系起来呢?我们在什么地方定义这些联系呢?很快,我想到了数据访问层,在数据访问层中定义和实现这些联系,为了实现数据访问层和业务层的松耦合,我又在业务层上定义了数据库接口。

    我在业务层定义了两个接口:数据库接口(IDatabase)和实体数据访问接口(IEntityDataAccess)。

    实体数据访问接口(IEntityDataAccess),继承IQueryable,定义了对实体的操作:

  1. 添加实体
  2. 删除实体
  3. 取得实体对应的数据库

    数据库接口(IDatabase)定义了对数据库的操作:

  1. 取得实体的数据访问
  2. 提交数据库变更
  3. 执行sql语句
  4. 取得业务实体

    下面是示例代码:

    实体数据访问接口(IEntityDataAccess): 

Code

     数据库接口(IDatabase)(假设已经有有个实体:User和UserRole):

Code

    定义完成这些接口以后,我们就要在定义数据访问层,并在数据访问层中实现定义在业务层的接口。

    数据访问层中有两个类:Database和EntityDataAccessAdapter,还有linq的映射文件MappingSource。

    首先,是Database类,继承于IDatabase接口,这个类实现的功能如下:

  1.  根据连接字符串和映射文件取得数据库。
  2. 实现数据库接口
  3. 取得业务实体

    代码如下:

Code

   其次,是EntityDataAccessAdapter,继承于IEntityDataAccess。实现的功能如下: 

  1. 实现各个接口的功能。
  2. 将linq定义的数据访问方法适配到业务层定义的数据访问接口上。

代码如下:

Code

     通过以上操作,定义了数据访问层,并在其中实现了在业务层中定义的接口。实现了数据访问层和业务层的松耦合。

后记:

    这是我在博客园上发表在首页的第一篇文章,水平有限,很属于菜鸟的初级阶段,难免会有错误和不足,欢迎各位高手批评指正^_^。也希望能抛砖引玉,欢迎交流。^_^