LINQ to SQL实现数据访问通用基类

LINQ to SQL让人着迷,在.Net应用程序当中,.它提供了一种安全,强大和非常灵活的方式执行数据 访问,在当前微软传道者介绍上看,很容易上手。

不幸的是,当你对LINQ进行仔细研究后,我发现在多层架构中使用LINQ的并不是十分容易。

本文介绍用LINQ to SQL实现数据层的典型的问题点 ,并提供了一个简单,方便和灵活的方式来克服 它们。

本文附带的LING to SQL 实现数据访问通用类有以下的特点:

实现了存储库模式,你可以用不到10行代码执行LINQ实体类型的CRUD (Create, Update, Delete)操作 。

无缝协作,支持LINQ断开模式(Disconnected LINQ Mode)。

在单一数据库和LINQ实体间支持透明的数据库更新和数据加载。

提供为一种方便的功能,在调试你的应用程寻时候,它把所有执行的SQL语句输出控制台。

本文将假定您对LINQ to SQL (也称为DLINQ )有一个基本的了解并如何使用它。否则,,,回到此 网页,看看本教程入门系列,如何在多层次应用中使用LINQ to SQL。

存在的问题

如果您只是在你的UI层直接用LinqToDataSource对象衔接数据库,那LINQ to SQL太容易使用了。但是 ,这种做法不完全面向对象,当然也不是一个可取的架构,除非你是为了快速编码和脏乱的应用程序,并 且最终没有去扩展的它打算。

相反,大多数开发人员把它们的应用程序划分成若干层,如下:

数据访问层(Data Access Layer)

业务层 (Business Layer)

用户界面层(UI Layer)

这就是所谓的多层数据库应用程序设计。LINQ to SQL将用于数据访问层。

LINQto SQL的问题是-尽管它的许多优点-但是如果要实现数据层并不是很简单。

请看下面的数据库模式(database schema):

一旦你要加载和保存LINQ实体到同一个的数据上下文实例(data context instance)(这就是所谓“ 连接模式”),用LINQ实现数据层非常直接。

例如,让我们从数据库中获取实体编号为1的客户,改变属性first name为“Homer”后在重新储存到 数据库中。在一个多层数据库应用程序中,在UI或业务层的某个地方的代码可能看起来就像这样:

1.

2.       //create a new repository instance

3.       CustomersRepository customersRepository = new CustomersRepository();

4.       //load a customer instance and change it's FirstName;

5.       Customer customer = customersRepository.Load(2);

6.       customer.FirstName = "Homer";

7.       //commmit customer to database

8.       customersRepository.Save(customer);

时间: 2024-10-30 00:52:57

LINQ to SQL实现数据访问通用基类的相关文章

LINQ to SQL实现数据访问通用基类(续)

在我们基于Domain驱动模式开发面向对象的多层架构的时候,层和层之间数据的传输对象(DTO)往往 简化为领域对象模型,在上文中就是我们利用LINQ TO SQL对象设计器生成的Bill,Customer等实体类. 存在的问题 通常的做法,我们把这些实体类单独分成一层,这样程序分层划分成如下: 数据访问层(Data Access Layer) 业务层 (Business Layer) 用户界面层(UI Layer) 实体层(Entity Layer) 注意,多层应用程序,一般遵守这样的规则:UI

asp.net 数据访问层基类_实用技巧

部分代码: 复制代码 代码如下: using System; using System.Collections; using System.Collections.Specialized; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Data.Common; using System.Collections.Generic; namespace sosuo8.DB

linq to sql修改数据数据库不更新

问题描述 linq to sql修改数据数据库不更新 代码执行,就是不更新 DataClasses3DataContext db = new DataClasses3DataContext(); gongzi h = new gongzi(); var results = from r in db.gongzi where r.用户ID == Label5.Text && r.时间 == Convert.ToDateTime(Label6.Text) select r; if (resul

SQL Server数据访问程序优化指南

经过紧张的调查,你发现问题出在数据库上,当应用程序尝试访问/更新数据时,数据库执行得相当慢,再次深入调查数据库后,你发现数据库表增长得很大,有些表甚至有上千万行数据,http://www.aliyun.com/zixun/aggregation/8531.html">测试团队开始在生产数据库上测试,发现订单提交过程需要花5分钟时间,但在网站上线前的测试中,提交一次订单只需要2/3秒. 类似这种故事在世界各个角落每天都会上演,几乎每个开发人员在其开发生涯中都会遇到这种事情,我也曾多次遇到这种

Linq to SQL 插入数据时的一个问题_MsSql

复制代码 代码如下: create table RSSFeedRight ( FeedId int Foreign Key (FeedId) References RSSFeed(FeedId) NOT NULL , -- FeedId , UserId int Foreign Key (UserId) References UserInfo(UserId) NOT NULL , -- UserId , RightValue bigint NOT NULL Primary key (UserId

Linq to SQL 插入数据时的一个问题

复制代码 代码如下:create table RSSFeedRight ( FeedId int Foreign Key (FeedId) References RSSFeed(FeedId) NOT NULL , -- FeedId , UserId int Foreign Key (UserId) References UserInfo(UserId) NOT NULL , -- UserId , RightValue bigint NOT NULL Primary key (UserId,

linq to sql submitchanges数据不更新的问题

问题描述 publicMain(){InitializeComponent();}DataClassesDataContexta=newDataClassesDataContext();privatevoidMain_Load(objectsender,EventArgse){bindingSource1.DataSource=a.Table;}privatevoidbutton1_Click(objectsender,EventArgse){ChangeSetchangeSet=a.GetCh

Asp.Net Oracle数据的通用操作类_实用技巧

在一个项目中,可能用到2种数据,比如说ORACLE ,MS_SQLSERVER 同时要用到,MS-SQL的数据通用类在很多的教程中都有现成的例子和代码,但是ORACLE比较少见,但是本次项目中正好用到,贴出来和大家一起共享. 这里用OraDbHelper.cs做常见的四种数据操作 一 ExecuteDataTable 返回到内存数据表 二 SqlDataReader 直接读数据 三 ExecuteScalar 获得一条数据 四 ExecuteNonQuery 对数据库执行增删改操作 环境:客户端

业务逻辑层如何导入数据访问层的类

问题描述 我自己做的一个论坛 UI直接放在网站里面 在解决方案上新建了Business工程和Data工程 里面分别有业务逻辑的类和数据访问的类 但是因为我把一些封装的数据放在app_code使得Business和Data里访问不了 还有Business下的命名空间引用不了Data下命名空间的Database.cs类询问以下哪一快出问题了 解决方案 解决方案二:你的Data命令空间是否和系统的System.Data有冲突?解决方案三:using