2017-09-27 44 views
0

我將MySQL項目的數據庫連接更改爲從MySQL目標SQL Server。但是,試圖運行Update-Database -StartProjectName ProjectName針對SQL Server中的數據庫時,我收到以下錯誤實體框架不斷嘗試連接到舊的ADO.NET提供程序,儘管它已被更改

指定的架構無效。錯誤:(0,0):錯誤0152:沒有實體 找到ADO.NET提供程序的框架提供程序,其名稱不變爲 'MySql.Data.MySqlClient'。確保提供程序在應用程序配置文件的 'entityFramework'部分中註冊。有關更多信息,請參閱 http://go.microsoft.com/fwlink/?LinkId=260882

所以,我想,以確保我的項目是免費的MySQL

  1. 使用Ctrl + F,搜索所有MySQL關鍵字:沒有發現。通過NuGet包管理器
  2. 卸載MySQL的包

爲什麼實體框架不斷地問我對MySQL提供程序時,我已經清楚地表明,它應該在配置文件中使用默認的MS SQL供應商?

這是我的配置文件:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <connectionStrings> 
    <add name="Connection" connectionString="Data Source=SQLSERVER123;Database=DB123;Integrated Security=true" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <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" /> 
    </providers> 
    </entityFramework> 
</configuration> 

這是我的DbContext文件:

using System; 
using System.Data.Entity; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 

namespace ProjectName.MSSQL 
{ 
    public class ProjectNameContext:DbContext 
    { 
     public ProjectNameContext() 
      : base("Connection") 
     { 

     } 

     public static ProjectNameContext Create() 
     { 
      return new ProjectNameContext(); 
     } 

     public DbSet<Users> Users { get; set; } 
    } 
} 
+1

這是一個代碼遷移第一?嘗試刪除Migrations目錄中的所有先前的遷移代碼,因爲EF可能會保留以前的遷移腳本中的以前的數據庫信息。然後用SQL Server DB重新創建這些腳本,如同類似的問題:https://stackoverflow.com/questions/39605532/ef-code-first-mysql-to-sql-server。 –

+0

您不應該刪除遷移才能使其工作。嘗試在運行遷移時顯式指定連接字符串:'Update-Database -ConnectionString「XXX」-ConnectionProviderName「System.Data.SqlClient」-StartupProject ProjectName' –

+0

@TetsuyaYamamoto我重新安裝了實體框架,現在它似乎正常工作。謝謝! – Mark

回答

0

那麼什麼工作對我來說是I created my own DbConfiguration class and referenced it using the codeConfigurationType property in App.config

我定製Dbconfiguration

using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Data.Entity.SqlServer; 

namespace ProjectName.MSSQL 
{ 
    public class MSSQLDbConfiguration:DbConfiguration 
    { 
     public MSSQLDbConfiguration() 
     { 
      this.SetProviderServices("System.Data.SqlClient", System.Data.Entity.SqlServer.SqlProviderServices.Instance); 
      this.SetDefaultConnectionFactory(new LocalDbConnectionFactory("v11.0")); 
     } 
    } 
} 

我的App.config

<entityFramework codeConfigurationType="ProjectName.MSSQL.MSSQLDbConfiguration, ProjectName.MSSQL"> 
... 
any stuff... 
... 
</entityFramework> 
相關問題