Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有方法从app.config文件加载Linq到SQL的现有连接字符串?_C#_Asp.net_Visual Studio_Linq To Sql - Fatal编程技术网

C# 是否有方法从app.config文件加载Linq到SQL的现有连接字符串?

C# 是否有方法从app.config文件加载Linq到SQL的现有连接字符串?,c#,asp.net,visual-studio,linq-to-sql,C#,Asp.net,Visual Studio,Linq To Sql,我的LINQtoSQL项目遇到了一个非常恼人的问题。当我在web项目下添加所有内容时,一切都按照预期进行,我可以告诉它使用存储在web.config文件中的现有连接字符串,Linq代码直接从ConfigurationManager提取 一旦我将代码移动到它自己的项目中,这一切都变得丑陋。我已经创建了一个app.config文件,将连接字符串放在那里,就像它在web.config中一样,但是当我尝试在IDE中添加另一个表时,总是强迫我硬编码连接字符串,或者创建一个设置文件并将其放在那里,然后用一个

我的LINQtoSQL项目遇到了一个非常恼人的问题。当我在web项目下添加所有内容时,一切都按照预期进行,我可以告诉它使用存储在web.config文件中的现有连接字符串,Linq代码直接从ConfigurationManager提取

一旦我将代码移动到它自己的项目中,这一切都变得丑陋。我已经创建了一个app.config文件,将连接字符串放在那里,就像它在web.config中一样,但是当我尝试在IDE中添加另一个表时,总是强迫我硬编码连接字符串,或者创建一个设置文件并将其放在那里,然后用一个新名称将一个新条目添加到app.config文件中

有没有一种方法可以让我的Linq代码保留在它自己的项目中,而不用IDE不断地硬编码连接字符串或创建设置文件,仍然可以引用我的配置文件?我正在将DAL的一部分转换为使用Linq到SQL,因此我希望使用我们的旧代码正在使用的现有连接字符串,并将该值保留在一个公共位置,一个点,而不是多个点

手动将模式更改为WebSettings而不是AppSettings,直到我尝试添加一个新表,然后返回到硬编码值或重新创建设置文件。我还尝试将项目类型切换为web项目,然后将我的app.config重命名为web.config,然后一切按我所希望的方式运行。我只是不确定把它作为一个web项目是否会有任何问题,因为它实际上不是一个。该项目仅包含Linq to SQL代码和my repository类的实现

我的项目布局如下所示

Website -connectionString.config -web.config (refers to connectionString.config) Middle Tier -Business Logic -Repository Interfaces -etc. DAL -Linq to SQL code -Existing SPROC code -connectionString.config (linked from the web poject) -app.config (refers to connectionString.config)
public partial class DataContext
{
    partial void OnCreated()
    {
        this.Connection.ConnectionString =       
        ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;
    } 
}
非网络项目


每次我试图使默认构造函数看起来像第一种方式,一旦我对文件进行更改,它总是自动更改回第二种方式,除非DBML位于web项目中。

如果您的意思是:我可以在Linq-2-Sql中使用特定的连接字符串吗?那么答案是肯定的

当您实例化DataConext时,您可以传入一个连接字符串,该字符串可以来自您喜欢的任何地方


如果您想使用Linq项目中配置的连接字符串,那么您可以创建自己的设置类并将其添加到其中,然后通过Linq项目中的代码引用它。

我使用了一个技巧:

public partial class DataContext
{
    partial void OnCreated()
    {
        this.Connection.ConnectionString =
                     global::System.Configuration.ConfigurationManager
                     .ConnectionStrings["SQLServer"].ConnectionString;
    }
}

这将从当前配置管理器中读取连接字符串,当前配置管理器(对于ASP.Net网站)将是Web.config。我只是将这个部分类定义添加到定义dbml的同一个项目中。然后,使用dbml项目的任何其他项目只需在app.config/web.config中定义它们的连接字符串。

您需要创建一个新的特殊类DataContext,如下所示

Website -connectionString.config -web.config (refers to connectionString.config) Middle Tier -Business Logic -Repository Interfaces -etc. DAL -Linq to SQL code -Existing SPROC code -connectionString.config (linked from the web poject) -app.config (refers to connectionString.config)
public partial class DataContext
{
    partial void OnCreated()
    {
        this.Connection.ConnectionString =       
        ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;
    } 
}

它会自动从web.config文件中读取您的连接字符串,有关更多详细信息,请参见

在我的StructureMap注册表类中,我说的是要使用什么连接字符串,但我希望我的Linq to SQL文件不会被硬编码的连接字符串或带有连接字符串的设置文件弄乱。当DBML文件在web项目中时,它们会使用现有的连接字符串,但在任何其他项目中,它们会尝试以自己的方式存储/引用连接字符串,从而在多个位置产生多个连接字符串。啊,好的,现在我知道你的意思了。不幸的是,我遇到了同样的问题,在使用设计器时遇到的问题之一,对不起。