Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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# 正在从应用程序配置文件获取EntityConnection字符串_C#_.net_Sql Server_Entity Framework_Connection String - Fatal编程技术网

C# 正在从应用程序配置文件获取EntityConnection字符串

C# 正在从应用程序配置文件获取EntityConnection字符串,c#,.net,sql-server,entity-framework,connection-string,C#,.net,Sql Server,Entity Framework,Connection String,一些简短的问题: 因此,我有一个LogInWindow对话框,用于收集所有SQL登录信息,然后将构造的连接字符串传递给ServiceManager.InitializeContext()方法,该方法使用特定的提供程序连接初始化实体上下文 一切正常。但是我想用App.config配置文件中定义的值初始化LogInWindow对话框 是否有进行此初始设置的首选方法?i、 例如,我是否应该仅仅为了获取默认提供程序连接而使用默认构造函数实例化一个虚拟的EntityContext?有“更干净”的方法吗 顺

一些简短的问题:

因此,我有一个
LogInWindow
对话框,用于收集所有SQL登录信息,然后将构造的连接字符串传递给
ServiceManager.InitializeContext()
方法,该方法使用特定的提供程序连接初始化实体上下文

一切正常。但是我想用App.config配置文件中定义的值初始化
LogInWindow
对话框

是否有进行此初始设置的首选方法?i、 例如,我是否应该仅仅为了获取默认提供程序连接而使用默认构造函数实例化一个虚拟的
EntityContext
?有“更干净”的方法吗

顺便问一下,您是否认为这是一种“安全”的做法,将这种类型的代码>窗体?关闭()/<代码>在处理程序中调用到<代码>窗体。我在MSDN上读到,不建议在
Form.Load
事件的处理程序中调用
Form.Close()

public partial class MainWindow : Form {

    private void MainWindow_Shown(object sender, EventArgs e) {
        using (var logInWindow = new LogInWindow()) {
            if (logInWindow.ShowDialog(this) == DialogResult.OK) {
                this.serviceManager.InitializeContext(logInWindow.ConnectionString);
            } else {
                this.Close();
            }
        }
    }
}


public sealed class ServiceManager : IDisposable {

    public void InitializeContext(string connectionString) {
        if (this.EntityContext != null)
            throw new InvalidOperationException("EntityContext cannot be initialized multiple times.");

        var entityConnectionString = new EntityConnectionStringBuilder();
        entityConnectionString.ProviderConnectionString = connectionString;
        entityConnectionString.Provider = "System.Data.SqlClient";
        entityConnectionString.Metadata = "res://*/EntityModel.EntityModel.csdl|res://*/EntityModel.EntityModel.ssdl|res://*/EntityModel.EntityModel.msl";

        this.EntityContext = new EntityContext(entityConnectionString.ConnectionString);
        this.EntityContext.ObjectMaterialized += EntityContext_ObjectMaterialized;
    }
}

您可以使用System.Configuration类访问App.config的所有部分

例如:

var connectString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

var stringBuilder = new SqlConnectionStringBuilder(connectString);

string UserID = stringBuilder.UserID;
string Password = stringBuilder.Password;
string catalog = stringBuilder.InitialCatalog;
App.config

<configuration>
   <connectionStrings>
     <add name="MyConnectionString" connectionString="metadata=res://*/...........
   </connectionStrings>
</configuration>


谢谢现在我很好奇,
ConfigurationManager.connectionString
集合返回什么类型的连接?A
实体连接
?请记住,我只对其中的提供者连接字符串部分感兴趣。哦,我明白了,这是一个
ConnectionStringSettings
。。。问题是,该类型不会将连接字符串分解为多个部分,即初始目录、Uset ID、密码等。。。尽管如此,我仍然发现使用
ConfigurationManager
很有用。我有一个应用程序,它完全可以执行您要执行的操作,我只是拆分连接字符串以获取用户名/密码。有一种更好的方法可以做到这一点,但我没有发现我的黑客方法有任何问题:)有一种方法可以做你想做的事情,也修复了我的实现:)更新上述我意识到这是一个古老的答案,但我想让其他人知道我发现它不能与当前版本的ADO.Net一起工作会很有帮助。当我调用
SqlConnectionStringBuilder()
构造函数时,它会失败,出现异常消息“关键字不受支持:'metadata.”“我的连接字符串是标准EF连接字符串-`”`