Estoy empezando con Entity Framework (4.3.1) y estoy haciendo un modelo de primer código con herencia TPT utilizando el proveedor de EF de MySQL (6.5.4). Al intentar crear la estructura de base de datos, estoy recibiendo un MySQLException "Identifier name 'LongClassNameOne_TypeConstraint_From_ClassName2s_To_LongClassNameOnes' is too long"
(Esta es la relación que relaciona la mesa de la clase derivada a la mesa de la clase padre.)Identificador generado demasiado largo para el nombre de restricción
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()
...
¿Cómo puedo controlar este nombre para que sea más corto, o obligarlo a recortar el límite de nombre de 64 caracteres, o algo así?
Problema malvado. No puedo responder la pregunta, pero para SQL Server nunca he visto una forma de controlar y personalizar los nombres de las restricciones. Incluso no estoy seguro de quién es responsable y de quién es el culpable del nombre: Entity Framework en sí o el proveedor de MySQL. – Slauma
No tengo un entorno en frente mío, pero esto podría ayudar (si es posible que necesite más, publicaré una respuesta más adelante) - http://msdn.microsoft.com/en-us/library/hh829636 (v = vs.103) .aspx - y posiblemente este enlace - http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/2b182758-ef29-4407-b62b-12aee816aa45. es decir, podría establecer su propio 'SqlGenerator' y luego hay sustituciones para varias partes de generación de SQL, pero no estoy seguro si esto cubre lo que necesita. – NSGaga
@NSGaga - Si sobrescribe SqlGenerator y cambia los nombres, es posible que su base de datos nunca coincida con el modelo generado por CodeFirst y puede encontrarse con muchos problemas extraños que serán difíciles de resolver. – Pawel