Sto cercando di usare il codice EF6 primo + MySQL con le migrazioni, ma mi sono bloccato con questo errore durante add-migration
:EF6 codefirst + MySql migrazioni: tipo nvarchar (max) non supportato
The underlying provider does not support the type 'nvarchar(max)'
E 'quindi sembra che EF stia cercando di usare i tipi di SQLServer per MySql, anche se ho cambiato la factory di connessione predefinita nella mia configurazione.
È possibile trovare molti problemi con lo stesso messaggio di errore, ma nessuno di essi sembra aggiornato o suggerire qualcosa che non ho già provato. Ecco i miei passi per abilitare le migrazioni in una DLL DAL per MySql, qualcuno potrebbe dare un suggerimento?
(1) Aggiungere il NuGet pacchetti:
MySql.ConnectorNET.Data
MySql.ConnectorNET.Entity
(2) Aggiungere una stringa di connessione per MySql nel file App.config
, come:
(connectionStrings)
(add name="MySqlConn"
connectionString="Data Source=127.0.0.1;Port=3306;Database=dummy;User id=***;Password=***;charset=utf8"
providerName="MySql.Data.MySqlClient" /)
(/connectionStrings)
(3) Inoltre, assicurarsi che la configurazione (nel mio caso App.config
) è stato modificato da NuGet come specificato:
sostituire la produzione connessioni predefinita:
(tipo defaultconnectionfactory =" MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" /)
aggiungere il provider di MySql:
(invariantname fornitore = "MySql.Data.MySqlClient" Type = "MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version = 6.8.3.0, Culture = neutral, PublicKeyToken = c5687fc88969c44d" /)
fornitore metti in System.Data:
(system.data) (DbProviderFactories) (rimuovere name = "MySQL Provider" invariante = "MySql.Data.MySqlClient" /) (add name =" MySQL Data Provider " invariant =" MySql.Data.MySqlClient " description =". Net Framework Data Provider per MySQL " type =" MySql.Data.MySql Client.MySqlClientFactory, MySql.Data, Version = 6.8.3.0, Culture = neutral, PublicKeyToken = c5687fc88969c44d"/) (/ DbProviderFactories) (/system.data)
(4) aggiungere manualmente il tipo di configurazione codice attributo (preferisco non toccare il mio codice contesto dati, in quanto deve essere mantenuto generico), come raccomandato in http://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html:
(entityframework codeconfigurationtype="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6")
Un paio di proprietà di stringa nei miei oggetti POCO hanno nessun limite di durata come devono essere nvarchar(max)
ie text
in MySql.Tuttavia, ottengo l'errore citato sopra, con questo stacktrace:
System.ArgumentException: The underlying provider does not support the type 'nvarchar(max)'.
at MySql.Data.MySqlClient.MySqlProviderManifest.GetEdmType(TypeUsage storeType)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.BuildColumnModel(EdmProperty property, ModelMetadata modelMetadata, IDictionary`2 annotations)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.BuildAlterColumnOperation(String table, EdmProperty targetProperty, ModelMetadata targetModelMetadata, EdmProperty sourceProperty, ModelMetadata sourceModelMetadata)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.(FindAlteredColumns)b__24b(()f__AnonymousType2c`2()h__TransparentIdentifier243)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(ModelMetadata source, ModelMetadata target, Lazy`1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel, XDocument targetModel, Lazy`1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion)
at System.Data.Entity.Migrations.DbMigrator.Scaffold(String migrationName, String namespace, Boolean ignoreChanges)
at System.Data.Entity.Migrations.Design.MigrationScaffolder.Scaffold(String migrationName, Boolean ignoreChanges)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Scaffold(MigrationScaffolder scaffolder)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run()
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
at System.Data.Entity.Migrations.Design.ToolingFacade.Scaffold(String migrationName, String language, String rootNamespace, Boolean ignoreChanges)
at System.Data.Entity.Migrations.AddMigrationCommand.Execute(String name, Boolean force, Boolean ignoreChanges)
at System.Data.Entity.Migrations.AddMigrationCommand.()c__DisplayClass2.(.ctor)b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
The underlying provider does not support the type 'nvarchar(max)'.
Qualsiasi suggerimento?
6 mesi più tardi e ho * esattamente * lo stesso problema. Avrei potuto scrivere questa domanda fino all'ultimo dettaglio. Sei mai arrivato per caso a qualche risposta con questo? – Adam
Purtroppo non l'ho fatto. Dovrei trovare una soluzione (oltre a impostare esplicitamente i tipi tramite attributi o sintassi fluente) la pubblicherò qui. Almeno io non sono solo :) – Naftis
Ho trovato qualcosa di interessante. Ho provato a convertire un progetto dall'utilizzo di mssql, quindi ho già avuto alcune migrazioni. Normalmente con il nostro errore non puoi nemmeno eseguire add-migration. Tuttavia, dato che avevo già installato i file di migrazione, potevo eseguire update-database ... che eseguiva l'RAN di tutte le migrazioni, ma dopo aver aggiunto tutte le modifiche allo schema, è saltato fuori con questo errore ... I ' m indovinando si verifica quando il Contesto viene avviato per la prima volta prima della semina. Pazzesco che sono riuscito a rotolare in avanti (AND indietro) tramite update-database. – Adam