2016-03-31 26 views
2

実行時に接続文字列を使用するか、App.config.Howeverから接続文字列を削除してください。エラーが表示されます。実行時の接続文字列の設定 - EFコード

FYI:EF 6 CodeFirst

public class DfDbContext : DbContext 
{ 
    public DfDbContext() 
     : base(GetConnectionString()) 
    { 

    } 


    private static string GetConnectionString() 
    { 
     SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); 
     builder.DataSource = "xxxxx"; 
     builder.InitialCatalog = "xxxx"; 
     builder.UserID = "xxx"; 
     builder.Password = "xxxx"; 
     builder.MultipleActiveResultSets = true; 
     builder.PersistSecurityInfo = true; 
     return builder.ConnectionString.ToString(); 

    } 
} 

エラー

'System.ArgumentExceptionの' のSystem.Data.dllで発生したが、ユーザーコードで処理されなかったタイプの例外

追加情報:サポートされていないキーワード: '初期カタログ'。

代替ソリューションはありますか?

+0

データソースはサーバーの名前です。 InitialCatalogは、そのサーバー上のどのデータベースです。 (SQL Serverの場合) –

+0

ああ、それはおそらくそれです。その接続文字列から、EFはあなたがSQL Serverデータベースと通信していることを知る方法がありません。どのように使用しているデータベースタイプをEFに教えて、接続文字列の解釈方法を知っていますか? –

+0

接続文字列の代わりに開いている接続を渡すとどうなりますか? (いや、私は推測しているが、それは動作するはずのように聞こえる。) –

答えて

0

問題が解決しました!デフォルトの接続ファクトリーを設定する!

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True" /> 
    </parameters> 
</defaultConnectionFactory> 

以下のDbContextを使用します。

public class Model : DbContext 
{ 
    public Model() 
     : base(ConnectionString()) 
    { 
    } 

    public virtual DbSet<MyEntity> MyEntities { get; set; } 

    private static string ConnectionString() 
    { 
     // logic here 
     return "Data Source=(local);Initial Catalog=xx;Integrated Security=False;User ID=sa;Password=xx;MultipleActiveResultSets=True;App=EntityFramework"; 
    } 
} 
+0

接続文字列は、それがモデル関数内のハードコードされ、むしろ読んでいません。 app.configファイルでdefaultConnectionFactoryタグを使用できますか?コードからそれを読み取る方法は? –

0

linkから参照してください。有効な接続文字列は、次のようになります。

<add name="XXXX" 
    connectionString="Data Source=MONTGOMERY-XXXX;Initial Catalog=XXXX;Integrated Security=True;" 
    providerName="System.Data.SqlClient" /> 

プロバイダ名を忘れたと思います。追加してチェックしてみてください

関連する問題