将dbml中的连接字符串指向app.config文件

31

我能否只在Dbml.designer.cs中指向app.conf中的连接字符串? 我写了下面的代码,它成功地指向了app.config

public leDataContext() : 
    base(ConfigurationManager.ConnectionStrings["leConnString"].ToString(), mappingSource)
    {
        OnCreated();
    }

但是每当我修改或添加一个表到dbml中时,它就会自动将那段代码替换为这个。

 public leDataContext() : 
            base("Data Source=.\\SQLEXPRESS;AttachDbFilename=\"D:\\My Projects\\App_Data\\le.mdf\";Integrated Security=True;Connect Timeout=30;User Instance=True", mappingSource)
    {
        OnCreated();
    }

我已经展开了“连接”选项。将“应用程序设置”设置为false。

2个回答

55

这更像是对@Alex答案的扩展。

步骤1:将.dbml文件的连接属性设置为“none”。

enter image description here

步骤2:创建一个新的独立的部分类,与.dbml文件的现有部分类同名。然后使用无参构造函数设置connectionString属性。

public partial class DataClassesDataContext
{
  public DataClassesDataContext() : base(ConfigurationManager.ConnectionStrings["Dev-connString"].ConnectionString)
  {
    OnCreated();
  }
}
第三步: 差不多完成了!最后,您需要在您的app.config文件中定义连接字符串,如下所示。
<connectionStrings>

  <add
  name="Dev-connString"
  connectionString="Data Source=yasser-home;Initial Catalog=pp;Persist Security Info=True;User ID=sa;Password=gogole"
  providerName="System.Data.SqlClient" />

</connectionStrings>

现在,您可以轻松地从app.config文件中更改connectionString,而无需重新编译代码,否则情况将是如此。

为什么要创建单独的部分类?我不能编辑现有的Dbml.designer.cs文件吗?

不要手动修改Dbml.designer.cs文件,因为当您添加/编辑/删除表格、存储过程等时,它会被重写。


谢谢。并且你将连接属性设置为none,因为否则它会定义自己的构造函数。 - symbiont
小提示:如果要将连接字符串设置为“无”,您需要打开dbml,以便在左侧显示模型架构。然后,在架构内右键单击并单击属性。 - Yan
这应该是答案,因为它包含进一步的说明。 - levis84
如果有人需要帮助,我发现只有在将类声明为MyProject.Content命名空间内的情况下才能正常工作。(其中MyProject显然是您自己项目的基本命名空间。) - ChrisFox

43

不要手动修改Dbml.designer.cs文件,因为当你编辑/添加表等操作时,它将被重写。与其这样做,不如将.dbml设计文件的Connection属性设置为None,并添加一个无参数构造函数的部分类:

public partial class leDataContext
{ 
   public leDataContext() : 
       base(ConfigurationManager.ConnectionStrings["leConnString"].ToString())
    {
        OnCreated();
    }    
}

我已将连接更改为空,并与其他构造函数一起添加了新的构造函数。但它仍然被更改为 base("Data Source=.\\SQLEXPRESS;AttachDbFile.. public leDataContext() : base(System.Configuration.ConfigurationManager.ConnectionStrings["leConnString"].ToString()) { OnCreated(); }public leDataContext(string connection) : base(connection, mappingSource) { OnCreated(); } public leDataContext(System.Data.IDbConnection connection) : base(connection, mappingSource) { OnCreated(); } - VeecoTech
1
@belinq:你应该添加一个新文件,并在其中定义一个无参数的构造函数(在部分类中)。这样,这个构造函数就不会被覆盖。据我所知,你把这个构造函数放到了“dbml.designer.cs”文件中-这就是问题所在。 - Oleks
1
注意:在 Visual Studio 2013 中我们没有那个连接属性,所以我直接从 dbml xml 文件中删除了连接节点。 - Andrew Fraser
似乎你还必须继承自System.Data.Linq.DataContext,否则就没有OnCreated()基方法可供调用。 - CodeOrElse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接