Sono appena iniziato con Entity Framework (4.3.1) e sto creando un modello code-first con ereditarietà TPT utilizzando il provider di MySQL EF (6.5.4). Quando si tenta di creare la struttura del database, sto ricevendo un MySQLException "Identifier name 'LongClassNameOne_TypeConstraint_From_ClassName2s_To_LongClassNameOnes' is too long"
(Questa è la relazione che si riferisce tavolo della classe derivata al tavolo della classe genitore.)Identificatore generato troppo lungo per il nome del vincolo
at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)
at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)
at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
at MySql.Data.MySqlClient.MySqlScript.Execute()
at MySql.Data.MySqlClient.MySqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection)
at System.Data.Objects.ObjectContext.CreateDatabase()
at System.Data.Entity.Internal.DatabaseOperations.Create(ObjectContext objectContext)
at System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func`3 createMigrator, ObjectContext objectContext)
at System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext)
at System.Data.Entity.Database.Create()
at System.Data.Entity.DropCreateDatabaseAlways`1.InitializeDatabase(TContext context)
at System.Data.Entity.Database.<>c__DisplayClass2`1.<SetInitializerInternal>b__0(DbContext c)
at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.<PerformDatabaseInitialization>b__6()
at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)
at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c)
at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.InternalContext.ForceOSpaceLoadingForKnownEntityTypes()
at System.Data.Entity.DbContext.System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()
...
Come posso controllare questo nome per renderlo più breve, o forzare il taglio al limite del nome di 64 caratteri o qualcosa del genere?
Problema grave. Non riesco a rispondere alla domanda, ma per SQL Server non ho mai visto un modo per controllare e personalizzare i nomi dei vincoli. Non sono nemmeno sicuro di chi sia il responsabile e chi sia la colpa del nome: Entity Framework o il provider MySQL? – Slauma
Non ho un ambiente di fronte a me - ma questo potrebbe essere d'aiuto (se potessi averne bisogno ne posterò una risposta più tardi oggi) - http://msdn.microsoft.com/en-us/library/hh829636 (v = vs.103) .aspx - ed eventualmente questo link - http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/2b182758-ef29-4407-b62b-12aee816aa45. Ad esempio, è possibile impostare il proprio 'SqlGenerator' e poi ci sono delle sostituzioni per varie parti di generazione SQL - ma non sono sicuro che questo copra ciò di cui hai bisogno. – NSGaga
@NSGaga - Se si sovrascrive SqlGenerator e si cambiano i nomi, il database potrebbe non corrispondere mai al modello generato da CodeFirst e si potrebbero incontrare molti problemi strani che saranno difficili da risolvere. – Pawel