2016-09-30 152 views
0

我有一个web应用程序,它已经可以与SQL Server Compact一起使用。现在,我正在添加一个SQL Server模型。如果我只是简单的通过SQL服务器连接字符串DbContext情况下,我得到以下错误:同时使用SQL Server Compact和SQL Server与实体框架

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

我可以修复SQL服务器(但打破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服务器供应商,像这样:

<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)构造是这样的:

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; 
    } 

    // ... 
} 

现在我可以使用多个提供者。

相关问题