LinqToSql会把连接字符串散落地写在多个位置,并且编译后就固定不可更改了。
于是带来了各种不方便。比如在一台机器上配置好的程序拿到另一台机器上,就不得不找出所有散落的连接字符串,然后一一修改才能跑起来。
大家一定很希望在使用LinqToSql时也能从配置文件里读取连接字符串。
下边的技巧让我们达成这个目的。
1:在项目中添加一个LinqToSql类,假设名字为DataClasses1。
于是.NET会自动生成一堆东西:
双击DataClasses1.dbml,打开设计页面,从ServerExpoloer窗口拖几张表到这个设计页面,保存一下。
2:在DataClasses1.designer.cs文件中,找到DataClasses1DataContext的无参构造方法(它有许多构造方法,只找到无参的那个)。
将这个方法剪切掉。
3:在项目中新加一个类,确保这个类和生成的DataContext类名相同,都叫DataClasses1DataContext。在这个类定义前边加上partial修饰符。
4: 将刚刚剪切掉的方法复制到新添加的类中。修改base后边的参数为你的配置文件中的连接字符串。最后效果如下图。
5:如果你想要删除settings文件就删了吧,因为你下次往dbml里拖数据库类的时候它又会自动生成。
6:进入dbml的设计界面,在空白处右键,点“属性”。在属性栏里将“连接”项设置为“无”。
经过以上六步之后,你的Linq将只通过配置文件中的连接字符串去连接数据库,而不去关心你的表示从什么地方拖过来的。
每次往dbml里拖入新的类时,都记着重复一下步骤6.
一切OK了从此LinqToSql也移动自如了~~
当然,如果你不想这么麻烦,也可以用另一个办法:
向ServerExplorer中添加数据库的时候,连接名用(local)\SQLEXPRESS,而不是(主机名)\SQLEXPRESS。
入下图所示:
这样拿到别人机器上的时候,只要数据库不改名,原来的LingToSql照样能用。
参考:
1:LINQ and Web Application Connection Strings
2: How to set the connection string in your LINQ dbml file dynamically (based on web.config)