Проблема
Я столкнулся с проблемой в последнее время, у меня есть довольно стандартный набор классов моделей, описывающих мой бизнес-логику, я использую свободно Апи для описания свойств базы данных моих классов моделей. Но после того, как я делаю Add-Migration InitialMigration
Пакет Консоль управления выдает следующий вывод:Entity Framework терпит неудачу с FormatException, вероятно, ошибка
PM> Add-Migration InitialMigration
Scaffolding migration 'InitialMigration'.
System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Convert.ToInt32(String value)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.BuildColumnModel(XElement property, String entitySetName, ModelMetadata modelMetadata)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.<>c__DisplayClass125.<BuildCreateTableOperation>b__123(XElement p)
at System.Data.Entity.Migrations.Extensions.IEnumerableExtensions.Each[T](IEnumerable`1 ts, Action`1 action)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.BuildCreateTableOperation(String entitySetName, String tableName, String schema, ModelMetadata modelMetadata)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.<FindAddedTables>b__31(XElement es)
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(XDocument sourceModel, XDocument targetModel, String connectionString)
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.RunCore()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
Input string was not in a correct format.
Сначала это не было ясно, что строка была не в соответствующем формате, это заняло у меня несколько дней разработки различных подходов, но я у тебя ничего не получилось. В качестве последней точки защиты я отлаживал код Visual Studio и Entity Framework, который делает необходимые строительные леса, и оказалось, что проблема лежала в пределах NVARCHAR(MAX)
картирования полей string
. Так или иначе Entity Framework обрабатывал термин MAX
как целочисленную константу, вызывающую FormatException
во время процесса синтаксического анализа.
Догадка
Я думаю, что проблема заключается в конфигурации проекта или смеси Fluent Апите с Attribute API (модель была скопирована из другого проекта, который использовал атрибуты для описания свойств базы данных модели, миграции работали и все было в порядке, затем я удалил атрибуты и использовал беглый api, чтобы описать модель, и она перестала работать)
Я думаю, что, вероятно, я пропустил какую-то конфигурационную точку или неправильно использовал свободный api.
Вопрос
Есть ли способ, чтобы правильно сделать Entity Framework лакомство декларацию по умолчанию NVARCHAR(MAX)
и сделать его остановить разбор MAX
как целое ...
Here I've uploaded the project itself in case you would want to see the problem by your own eyes...
Это не работает, даже если я задал все строковые поля целым значениям, проблема сохраняется с какой-то странной таблицей «История», которая содержит поле «nvarchar (max)», к которому у меня нет доступа, это, вероятно, внутренняя таблица Entity Framework, которая используется под обложками ... – Lu4
Не можете ли вы воссоздать базу данных? Или вам нужно отменить последнюю миграцию и снова мигрировать? –
Да, в этом проблема, я не могу ее воссоздать, исключение FormatException ... – Lu4