Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架&x27;s代码第一次迁移失败,FormatException可能是错误 问题_.net_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

.net 实体框架&x27;s代码第一次迁移失败,FormatException可能是错误 问题

.net 实体框架&x27;s代码第一次迁移失败,FormatException可能是错误 问题,.net,entity-framework,asp.net-mvc-4,.net,Entity Framework,Asp.net Mvc 4,我最近遇到了一个问题,我有一组非常标准的模型类来描述我的业务逻辑,我正在使用fluentapi来描述我的模型类的数据库属性。但是在我执行Add Migration InitialMigration之后,Package Manager控制台将失败,并显示以下输出: PM> Add-Migration InitialMigration Scaffolding migration 'InitialMigration'. System.FormatException: Input string w

我最近遇到了一个问题,我有一组非常标准的模型类来描述我的业务逻辑,我正在使用fluentapi来描述我的模型类的数据库属性。但是在我执行
Add Migration InitialMigration
之后,Package Manager控制台将失败,并显示以下输出:

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.
PM>添加迁移初始迁移
脚手架迁移“初始迁移”。
System.FormatException:输入字符串的格式不正确。
位于System.Number.StringToNumber(字符串str、NumberStyles选项、NumberBuffer&Number、NumberFormatInfo信息、布尔解析十进制)
在System.Number.ParseInt32(字符串s、NumberStyles样式、NumberFormatInfo信息)
在System.Convert.ToInt32处(字符串值)
位于System.Data.Entity.Migrations.Infrastructure.EdmModelDifference.BuildColumnModel(XElement属性,字符串entitySetName,ModelMetadata ModelMetadata)
在System.Data.Entity.Migrations.Infrastructure.EdmModelDifference.c__DisplayClass125.b__123(XElement p)中
在System.Data.Entity.Migrations.Extensions.IEnumerableExtensions.Each[T](IEnumerable`1 ts,Action`1 Action)
位于System.Data.Entity.Migrations.Infrastructure.EdmModelDifference.BuildCreateTableOperation(String entitySetName、String tableName、String schema、ModelMetadata ModelMetadata)
位于System.Data.Entity.Migrations.Infrastructure.EdmModelDifference.b__31(XElement es)
在System.Linq.Enumerable.WhereSelectEnumerableInterator`2.MoveNext()中
位于System.Collections.Generic.List`1..ctor(IEnumerable`1集合)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
位于System.Data.Entity.Migrations.Infrastructure.EdmModelDifference.Diff(XDocument sourceModel、XDocument targetModel、String connectionString)
位于System.Data.Entity.Migrations.DbMigrator.Scaffold(字符串migrationName、字符串命名空间、布尔值ignoreChanges)
位于System.Data.Entity.Migrations.Design.MigrationScaffolder.Scaffold(字符串migrationName,布尔值ignoreChanges)
位于System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Scaffold(迁移文件夹脚手架工)
在System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore()中
位于System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()处
输入字符串的格式不正确。
起初不清楚什么字符串的格式不合适,我花了几天时间研究出不同的方法,但最终什么都没有。作为最后一点辩护,我调试了VisualStudio和实体框架代码,这些代码完成了所需的搭建,结果证明问题出在
NVARCHAR(MAX)
字符串的映射中。不知何故,实体框架将术语
MAX
视为一个整数常量,在解析过程中导致
FormatException

猜测 我认为问题在于项目配置或fluentapi与属性Api的混合(该模型是从其他项目复制的,该项目使用属性来描述模型的数据库属性,迁移正在进行,一切正常,然后我删除了属性并使用fluent api来描述该模型,模型停止工作)

我想我可能错过了一些配置点,或者误用了fluent api

问题 有没有一种方法可以使实体框架正确地处理默认的
NVARCHAR(MAX)
声明,并使其停止作为整数解析
MAX


您应该使用
MaxLength
属性(带)来注释具有最大长度的字符串。在Sql Server中,这将转换为
NVARCHAR(MAX)

也可以使用fluent方法,如中所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Company>().Property(x => x.Description).IsMaxLength();
    ...
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().Property(x=>x.Description).IsMaxLength();
...
}

不要同时使用IsMaxLength()和HasColumnType(“nvarchar”)。删除后者,它应该会起作用。

它不起作用,即使我将所有字符串字段都设置为整数值,但问题仍然存在于一些奇怪的
历史
表中,其中包含
nvarchar(max)
我无权访问的字段,这可能是一个内部实体框架表,在封面下使用…您不能重新创建数据库吗?或者您必须回滚最新的迁移并再次迁移吗?但是此属性/映射应该解决格式异常。您的意思是当您使用此属性/映射时仍然会出现此异常吗s属性/映射?是的,我确实遇到此异常,我无法创建迁移,也无法更新我的数据库,问题底部有一个链接,我上传了整个项目,您可以打开它并在package manager控制台中运行“Add migration InitialMigration”