【问题标题】:Point connectionstring in dbml to app.config将 dbml 中的连接字符串指向 app.config
【发布时间】:2011-07-05 13:45:27
【问题描述】:

我可以将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

【问题讨论】:

    标签: linq linq-to-sql


    【解决方案1】:

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

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

    第 2 步:为 .dbml 文件创建一个与现有分部类同名的新分部类。并使用无参构造函数设置connectionString属性。

    public partial class DataClassesDataContext
    {
      public DataClassesDataContext() : base(ConfigurationManager.ConnectionStrings["Dev-connString"].ConnectionString)
      {
        OnCreated();
      }
    }
    

    第 3 步:快完成了!最后,您需要在 app.config 文件中定义您的 connectionString,如下所示。

    <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 文件,因为在添加/编辑/删除表、存储过程等时它会被重写。

    【讨论】:

    • 谢谢。并且您将连接属性设置为无,否则它会定义它自己的构造函数
    • 小添加;要将连接字符串设置为无,您需要打开 dbml,以便在左侧显示模型模式。然后在架构内右键单击并单击属性。
    • 这应该是答案,因为它包括进一步的说明。
    • 如果它可以帮助其他人,我发现这仅在我声明该类位于 MyProject.Content 命名空间内时才有效。 (MyProject 显然是您自己项目的基本命名空间。)
    【解决方案2】:

    不要手动修改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(); }
    • @belinq:您应该添加一个新文件并在那里定义无参数构造函数(在部分类中)。在这种情况下,这个构造函数不会被覆盖。据我了解,您将此构造函数放入 dbml.designer.cs 文件中 - 这就是问题所在。
    • 注意:在 Visual Studio 2013 中,我们没有那个连接属性,所以我直接从 dbml xml 文件中删除了连接节点。
    • 看来您还必须从 System.Data.Linq.DataContext 继承,否则没有 OnCreated() 基方法可以调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2023-04-04
    • 2015-09-16
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多