问题
我最近遇到了一个问题,我有一组非常标准的模型类来描述我的业务逻辑,我正在使用 fluent Api 来描述我的模型类的数据库属性。但是在我做Add-Migration InitialMigration
包管理器控制台失败后,输出如下:
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
不知何故,实体框架将术语MAX
视为一个整数常量,导致FormatException
在解析过程中。
猜测
我认为问题在于项目配置或 Fluent Api 与 Attribute api 的混合(该模型是从其他项目中复制的,该项目使用属性来描述模型的数据库属性,迁移工作正常,一切正常,然后我删除了属性和使用fluent api来描述模型并且它停止工作)
我认为可能我错过了一些配置点或滥用了流畅的 api。
问题
有没有办法让实体框架正确处理默认NVARCHAR(MAX)
声明并使其停止解析MAX
为整数...