2016-09-30 15 views
0

Webアプリケーションは、すでにと互換性のあるWebアプリケーションを持っています。。今、私はSQL Serverモデルを追加しています。私が変更された場合、それをエンティティフレームワークでSQL Server CompactとSQL Serverの両方を同時に使用する

System.ArgumentException: Additional information: Keyword not supported: 'application name'.

私は(SQL Server Compactのをしかし壊す)SQL Serverのを修正することができます:私はちょうど簡単なDbContextインスタンスにSQL Serverの接続文字列を渡すと、私は次のエラーを取得しますweb.configファイルから:

<entityFramework> 
- <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> 
    <parameters> 
-  <parameter value="System.Data.SqlServerCe.4.0" /> 
    </parameters> 
    </defaultConnectionFactory> 
    <providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" /> 
    </providers> 
</entityFramework> 

へ:

<entityFramework> 
+ <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
    <parameters> 
+  <parameter value="mssqllocaldb" /> 
    </parameters> 
    </defaultConnectionFactory> 
    <providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" /> 
    </providers> 
</entityFramework> 

どのようにして動作させることができますか?私はのweb.config<context>のタグを追加する必要があると思いますが、正しくはありません。

答えて

0

解決済み! web.configは元々デフォルトのSQL Server Compact接続ファクトリとなっていました。唯一の違いは、このように、私はSQL Serverのプロバイダを追加したことである。今、私ができる

public partial class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base(GetConnection(), true) 
    { 
    } 

    private static DbConnection GetConnection() 
    { 
     var factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); 
     var connection = factory.CreateConnection(); 
     connection.ConnectionString = "Application Name=EntityFramework;Password=foo;Persist Security Info=True;User ID=bar;Initial Catalog=MyDb;Data Source=foo.database.windows.net"; 
     return connection; 
    } 

    // ... 
} 

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="System.Data.SqlServerCe.4.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
     <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" /> 
+  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 

その後、私のモデルのコンテキストクラスで、私はこのようなDbContext(DbConnection existingConnection, bool contextOwnsConnection)コンストラクタを呼び出します複数のプロバイダを使用する。

関連する問題