2010-11-11 51 views
3

我是新來EF使用EF4數據庫第一代和發生。 我必須將連接字符串置於與app.config不同的配置中。實體框架4是否有可能從另一個文件而不是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」而不是EF從app.config讀取?

感謝您的任何建議

回答

4

您是否嘗試過使用第二個ctor過載?

public MyTestContext(string connectionString) 

e.g

var ctx = new MyTestContext(GenerateConnectionString()); 

MSDN

實體數據模型工具生成存儲應用程序的配置文件中命名的連接字符串。在實例化ObjectContext類時,可以提供此命名的連接字符串,而不是連接字符串參數。

所以理論,它應該使用你提供的一個(除非你使用的參數的構造函數)。

我從來沒有嘗試過這個雖然(我不使用代碼生成,我手工一切)。

+0

這是我第一次參加EF,最後我也會手工製作。但是我在辦公室新建了一些東西,他們告訴我要用EF來做。沒有人知道怎麼做。你提到嘗試第二種超載。在哪裏應該代碼去了嗎?在我的部分課堂上?或者在課堂上調用上下文。 – user9969 2010-11-11 11:10:12

+0

我已經使用ctx = new MyTextContext(GenerateConnectionString()),但無法找到我的方法事件雖然是在部分類 – user9969 2010-11-11 11:13:21

+0

找不到方法?是相同的命名空間?如果您遺漏了部分關鍵字,是否會導致部分類錯誤?你能發佈你的部分類和代碼生成的設計器文件的命名空間/類聲明嗎?另一個選擇是創建一個派生自MyTextContext的類,並將'GenerateConnectionString'邏輯放在該類中,因此派生類的Ctor可以是'public MyDerivedTextContext():base(GenerateConnectionString())' – RPM1984 2010-11-11 11:45:25

相關問題