LINQ to SQL、NHibernate比较(二)-- LINQ to SQL实例
2009-09-22 17:07
399 查看
用ADO.NET操作数据库大家一定再熟悉不过了,select、insert、update等等SQL语句大家也都必然滚瓜烂熟。我将自己在学习LINQ to SQL过程中的动手经历记录下来,作为今后学习的参考,也希望对刚刚接触的人有一点帮助。
我在本文涉及到一个很简单的系统,利用DataGridView实现数据库数据的批量增、删、改,不是什么强大的功能。
如果有人感兴趣,可以在看完我的这篇文章之后用ADO.NET实现同样的功能,看看到底会比使用LINQ to SQL多多少时间,会多多少代码。(从设计到完成我用时大概2小时,代码量后面介绍中我会贴出我的代码)我相信很多人编码能力比我强很多,大家可以试试。总之尝试了LINQ to SQL我暂时没有用ADO.NET的想法。
(程序在Windows Server 2003、VSTS 2008、SQL Server 2005下完成)。
源码下载/Files/chenl861004/MyLinq.rar
1 什么系统?
1.1 数据库
先来看看数据库的设计,数据库名为test,作为简单系统的测试用数据库,test数据库含有三个表,Item、ItemIn和ItemOut。
[align=center]<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add
name="MyLinq.Properties.Settings.testConnectionString"
connectionString="Data Source=chenliang1;Initial Catalog=test;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>[/align]
2.2 实体类
1. 在数据源中右键点击添加新数据源
[align=center]using System;
using System.Transactions;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.Windows.Forms;
using MyLinq.ORM;
namespace MyLinq.MyMethod
[/align]
Methods类包含了处理窗体事件的方法我们在窗体代码中调用即可,下面是Item窗体代码。
Item窗体:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Linq;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MyLinq.MyMethod;
using MyLinq.ORM;
namespace MyLinq
其他两个窗体代码类似于Item,由此可见,窗体中只需调用Methods类中的相应方法,就可以实现所有需要的功能,并且只用传递一个泛型参数即可,无需每个窗体都写不同的数据库操作语句,并且利用添加数据源的方式,等同于在LINQ to SQL层和业务层又建立了一个中间层,使得我们甚至连LINQ to SQL的InsertToSubmit等方法的调用都省略。因为前台的DataGridView会根据我们对它的每次操作自动调用相应的增、删、改方法对内存中的实例对象类进行修改,一旦调用了SubmitChanges后才全部提交。
(关于LINQ to SQL到底有哪些使用的方法,请参看LINQ to SQL、NHibernate比较(一)-- LINQ和NHibernate初体验)
2.4 实体类属性
![](http://images.cnblogs.com/cnblogs_com/chenl861004/WindowsLiveWriter/LINQtoSQLNHibernateLINQtoSQL_F017/clip_image028_thumb.jpg)
图2.8 实体类属性
我们也可以在test.designer.cs中修改实体类属性的一些规则,比如我修改了ItemIn入库时间必须在1753-1-1 12:00:00和9999-12-31 11:59:59之间,这是根据SQL Server数据库来设置的。这样前台的DataGridView就不会接受越界的值。
3.小结
本文通过记录自己在学习LINQ to SQL过程中的一个简单例子,分析了基于LINQ to SQL作为数据库持久层的MIS系统的实现,虽然功能很简单,但是已经初窥可以感到LINQ to SQL给我们带来的方便。
试想如果这个系统是直接用ADO.NET实现,那么远不止这些代码,尤其是涉及到批量操作上面,我们需要判断DataGridView那些行进行了修改,添加了哪些行,删除了哪些行。开发时间将会变长,出错的几率也会变大,同时如果窗体较多,每个窗体都要设计相对独立的SQL语句,扩展很不方便,维护成了难题,LINQ to SQL默默地为我们完成了很多工作。
微软下一代ORM方案ADO.NET Entity Framework已经出现,并且随着VS2010和.NET 4.0的发布应该现在比较完善了,不过LINQ to SQL对于开发中小企业项目来说仍不失为一个不错的选择。
我在本文涉及到一个很简单的系统,利用DataGridView实现数据库数据的批量增、删、改,不是什么强大的功能。
如果有人感兴趣,可以在看完我的这篇文章之后用ADO.NET实现同样的功能,看看到底会比使用LINQ to SQL多多少时间,会多多少代码。(从设计到完成我用时大概2小时,代码量后面介绍中我会贴出我的代码)我相信很多人编码能力比我强很多,大家可以试试。总之尝试了LINQ to SQL我暂时没有用ADO.NET的想法。
(程序在Windows Server 2003、VSTS 2008、SQL Server 2005下完成)。
源码下载/Files/chenl861004/MyLinq.rar
1 什么系统?
1.1 数据库
先来看看数据库的设计,数据库名为test,作为简单系统的测试用数据库,test数据库含有三个表,Item、ItemIn和ItemOut。
[align=center]<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add
name="MyLinq.Properties.Settings.testConnectionString"
connectionString="Data Source=chenliang1;Initial Catalog=test;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>[/align]
2.2 实体类
1. 在数据源中右键点击添加新数据源
[align=center]using System;
using System.Transactions;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.Windows.Forms;
using MyLinq.ORM;
namespace MyLinq.MyMethod
[/align]
Methods类包含了处理窗体事件的方法我们在窗体代码中调用即可,下面是Item窗体代码。
Item窗体:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Linq;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MyLinq.MyMethod;
using MyLinq.ORM;
namespace MyLinq
其他两个窗体代码类似于Item,由此可见,窗体中只需调用Methods类中的相应方法,就可以实现所有需要的功能,并且只用传递一个泛型参数即可,无需每个窗体都写不同的数据库操作语句,并且利用添加数据源的方式,等同于在LINQ to SQL层和业务层又建立了一个中间层,使得我们甚至连LINQ to SQL的InsertToSubmit等方法的调用都省略。因为前台的DataGridView会根据我们对它的每次操作自动调用相应的增、删、改方法对内存中的实例对象类进行修改,一旦调用了SubmitChanges后才全部提交。
(关于LINQ to SQL到底有哪些使用的方法,请参看LINQ to SQL、NHibernate比较(一)-- LINQ和NHibernate初体验)
2.4 实体类属性
![](http://images.cnblogs.com/cnblogs_com/chenl861004/WindowsLiveWriter/LINQtoSQLNHibernateLINQtoSQL_F017/clip_image028_thumb.jpg)
图2.8 实体类属性
我们也可以在test.designer.cs中修改实体类属性的一些规则,比如我修改了ItemIn入库时间必须在1753-1-1 12:00:00和9999-12-31 11:59:59之间,这是根据SQL Server数据库来设置的。这样前台的DataGridView就不会接受越界的值。
3.小结
本文通过记录自己在学习LINQ to SQL过程中的一个简单例子,分析了基于LINQ to SQL作为数据库持久层的MIS系统的实现,虽然功能很简单,但是已经初窥可以感到LINQ to SQL给我们带来的方便。
试想如果这个系统是直接用ADO.NET实现,那么远不止这些代码,尤其是涉及到批量操作上面,我们需要判断DataGridView那些行进行了修改,添加了哪些行,删除了哪些行。开发时间将会变长,出错的几率也会变大,同时如果窗体较多,每个窗体都要设计相对独立的SQL语句,扩展很不方便,维护成了难题,LINQ to SQL默默地为我们完成了很多工作。
微软下一代ORM方案ADO.NET Entity Framework已经出现,并且随着VS2010和.NET 4.0的发布应该现在比较完善了,不过LINQ to SQL对于开发中小企业项目来说仍不失为一个不错的选择。
相关文章推荐
- LINQ to SQL、NHibernate比较(三)-- NHibernate实例
- 艾伟_转载:LINQ to SQL、NHibernate比较(二)-- LINQ to SQL实例
- LINQ to SQL、NHibernate比较(一)-- LINQ和NHibernate初体验
- ADO.NET、ODP.NET、Linq to SQL、ADO.NET Entity 、NHibernate在Oracle下的性能比较
- linq to sql 学习(8)linq的多表查询实例
- LINQ To SQL 语法及实例大全
- 测试SqlHelp,linq to SQL,Nhibernate批量处理数据的效率
- ADO.NET与ORM的比较(3)Linq to SQL实现CRUD
- LINQ_to_SQL语法及实例大全
- Visual Entity 使用教程(做最好用的实体代码生成器 支持 NHibernate 和 Linq to SQL)
- LinQ to Sql 分页,增,删,改 实例
- LINQ To SQL 语法及实例大全
- LINQ To SQL 语法及实例大全
- LINQ To SQL 语法及实例大全
- LINQ To SQL 语法及实例大全
- <转>LINQ To SQL 语法及实例大全
- c#中Linq to Sql 增删除的实例
- ADO.NET与ORM的比较(3):Linq to SQL实现CRUD
- LINQ to SQL实例
- DataRabbit 3.0 与 Linq to sql 性能比较