Я только начинаю с Entity Framework (4.3.1) и создаю первую кодовую модель с наследованием TPT с использованием поставщика MySQL EF (6.5.4). При попытке создать структуру базы данных, Я получаю MySQLException "Identifier name 'LongClassNameOne_TypeConstraint_From_ClassName2s_To_LongClassNameOnes' is too long"
(Это отношение, которое относится таблица производного класса для таблицы родительского класса.)Сгенерированный идентификатор слишком длинный для имени ограничения
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()
...
Как я могу контролировать это имя, чтобы сделать его короче, или заставить его подрезать до 64-символьного лимита имени или что-то в этом направлении?
Зло проблема. Я не могу ответить на этот вопрос, но для SQL Server я никогда не видел способа контролировать и настраивать имена ограничений. Я даже не уверен, кто несет ответственность и кто виноват в имени: Entity Framework сам или поставщик MySQL? – Slauma
У меня нет среды передо мной - но это может помочь (если вам может понадобиться больше, я отправлю ответ позже сегодня) - http://msdn.microsoft.com/en-us/library/hh829636 (v = vs.103) .aspx - и, возможно, эта ссылка - http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/2b182758-ef29-4407-b62b-12aee816aa45. т. е. вы можете установить свой собственный 'SqlGenerator', а затем есть переопределения для различных частей генерации SQL, но я не уверен, охватывает ли это то, что вам нужно. – NSGaga
@NSGaga - Если вы перезаписываете SqlGenerator и меняете имена, ваша база данных может никогда не соответствовать модели, сгенерированной CodeFirst, и вы можете столкнуться с множеством странных проблем, которые трудно решить. – Pawel