LINQ框架搭建

LINQ诞生于.NET Framework3.5 ,相对于开发,大幅度的提升了开发的效率。程序员们可以不必直接面对那些恼人的T-SQL语句了。但这仅仅是一方面,对于LINQ褒贬不一,这里就不多说了,不过要是自己做个性能测试的话,其实大头儿还是在连接数据库那里,转换成T-SQL语句和连接数据库比还是九牛一毛。

用LINQ搭建项目时,很可能会用到很多地方,这时最好能将LINQ to SQL 单独分离出来建立一个数据集。

MySolution

└ Util

└ MySolution.BLL

└ MySolution.DAL

└ MySolution.Model

└ MySolution.Model.Tools

以示例数据库(Northwind)为例子,分为模型层,业务层,数据访问层。

拖出一个DBML文件,将Northwind中的表格映射成LINQ实体。

[![][image-1]][1]部署的时候可能会修改连接字符串,为了便于部署,需要将DBML中的连接字符串提取出来,所以建立的时候命名最好以数据库名称+原型命名,然后单独创建一个子类,继承它,在其中修改连接字符串。需要分离出一个存取字符串的工具。

[![][image-2]][2] Code:NorthwindDataContext ``\`

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\\\*
 * 2011/11/21 16:17:43
 * Coding by Abel
 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
namespace MySolution.Model
{
	[global::System.Data.Linq.Mapping.DatabaseAttribute(Name = "Northwind")]
	public partial class NorthwindDataContext : NorthwindOriginalDataContext
	{
	    private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
	    public NorthwindDataContext()
	        : base(MySolution.Model.Tools.Config.NorthwindConnectionString, mappingSource)
	    {
	        OnCreated();
	    }
............................................
}
	
	 Code:Config
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\\\*
 * 2011/11/21 16:17:43
 * Coding by Abel
 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace MySolution.Model.Tools
{
	public static class Config
	{
	    public static readonly string NorthwindConnectionString = ConfigurationManager
	                                                                        .ConnectionStrings["NorthwindConnectionString"]
	                                                                        .ToString();
	}
}
\`\`\\\`

这时DAL层就可以顺利调用模型层中的实体了。如果要用using来释放连接资源,有可能会出现如下错误

> 错误 1 “MySolution.Model.NorthwindDataContext”:using语句中使用的类型必须可隐式转换为“System.IDisposable” D:\\MyProject\\MySolution\\Util\\MySolution.DAL\\EmployeesDAL.cs 24 13 MySolution.DAL

以前一直困扰这个问题,其实在DataContext中已经实现了IDisposable这个接口了,但他一直不让用using自动释放。后来找到原因了,是因为项目中必须引入System.Data.Linq这个dll才可以,因为DataContext这个类是存在于这个命名空间之下的。

[1]:	http://www.abelzhou.com/wp-content/uploads/2011/12/MySolution.Model_.jpg
[2]:	http://www.abelzhou.com/wp-content/uploads/2011/12/MySolution.Model_.Tools_.jpg

[image-1]:	http://www.abelzhou.com/wp-content/uploads/2011/12/MySolution.Model_.jpg "MySolution.Model"
[image-2]:	http://www.abelzhou.com/wp-content/uploads/2011/12/MySolution.Model_.Tools_.jpg "MySolution.Model.Tools"