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"