实体框架4是否可以从另一个文件而不是app.config读取连接字符串?

时间:2010-11-11 10:53:24

标签: entity-framework

我是EF的新手,使用EF4和Database First,并且正在进行生成。 我必须将连接字符串放在与app.config不同的配置中。

我该怎么办?我怎么能绕过它?

我有一个MyTextContext的部分类 我有一个像这样的方法

   public static string GenerateConnectionString()
  {
     SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();

     // Set the properties for the data source.
     sqlBuilder.DataSource = dbServer;
     sqlBuilder.InitialCatalog = dbName;
     sqlBuilder.UserID = "YOUR_USERNAME";
     sqlBuilder.Password = "YOUR_PASSWORD";
     sqlBuilder.IntegratedSecurity = false;

     // Build the SqlConnection connection string.
     string providerString = sqlBuilder.ToString();

     // Initialize the EntityConnectionStringBuilder.
     var entityBuilder = new EntityConnectionStringBuilder();

     //Set the provider name.
     entityBuilder.Provider = "System.Data.SqlClient";

     // Set the provider-specific connection string.
     entityBuilder.ProviderConnectionString = providerString;

     // Set the Metadata location.
     entityBuilder.Metadata = @"res://*/myTestModel.csdl|
                            res://*/myTestModel.ssdl|
                            res://*/myTestModel.msl";


     return entityBuilder.ToString();
  }

我注意到我的EFModel.designer有一个像这样的构造函数:

    /// <summary>
    /// Initializes a new MyTestContext object using the connection string found in the 'MyTestContext' section of the application configuration file.
    /// </summary>
    public MyTestContext() : base("name=MyTestContext", "MyTestContext")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

    /// <summary>
    /// Initialize a new MyTestContext object.
    /// </summary>
    public MyTestContext(string connectionString) : base(connectionString, "MyTestContext")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

    /// <summary>
    /// Initialize a new MyTestContext object.
    /// </summary>
    public MyTestContext(EntityConnection connection) : base(connection, "MyTestContext")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

如何使用我的“GenerateConnectionString”而不是从app.config中读取EF?

感谢您的任何建议

1 个答案:

答案 0 :(得分:5)

您是否尝试使用第二个ctor重载?

public MyTestContext(string connectionString)

e.g

var ctx = new MyTestContext(GenerateConnectionString());

来自MSDN

  

实体数据模型工具生成一个存储在应用程序配置文件中的命名连接字符串。在实例化ObjectContext类时,可以提供此命名连接字符串而不是connectionString参数。

所以在 theory 中,它应该使用你提供的那个(除非你使用无参数构造函数)。

我从来没有试过这个(我不使用代码生成,我手工制作所有东西)。