我正在使用Entity Framework 4.0
创建一个属性超过1k的新类时,我在创建迁移包后遇到问题。在尝试编译项目时,我得到Build Failed。 " csc.exe已退出,代码为255"
当仔细查看详细信息时,我在构建日志中看到了这个消息:
使用" Csc"来自程序集的任务" C:\ Program Files(x86)\ MSBuild \ 14.0 \ bin \ Microsoft.Build.Tasks.CodeAnalysis.dll"。
1>任务" Csc"
1 GT; C:\ Program Files(x86)\ MSBuild \ 14.0 \ bin \ csc.exe / noconfig / nowarn:1701,1702,2008 / nostdlib + / platform:anycpu32bitpreferred / errorreport:prompt / warn:4 / define:DEBUG; TRACE / errorendlocation / preferreduilang:en-US / highentropyva + / reference:" C:......
1 GT;
1 GT;由于StackOverflowException,进程终止。
1> C:\ Program Files(x86)\ MSBuild \ 14.0 \ bin \ Microsoft.CSharp.Core.targets(67,5):错误MSB6006:" csc.exe"退出代码255。
显然,迁移脚本中的Up()方法会创建一个非常大的CreateTable方法。我认为这是问题所在。我不太确定。
使用EF时,实际上不可能有一个包含这么多字段的类吗?
更新: 模型类在一个单独的项目中并编译好。 问题在于迁移方法。
它也是自动生成的,看起来像这样:
public partial class CustomClass : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.GeneratedClasses",
c => new
{
RowId = c.Int(nullable: false, identity: true),
RecordTime = c.DateTime(nullable: false),
Prop1 = c.Decimal(nullable: false, precision: 18, scale: 2),
Prop2 = c.Decimal(nullable: false, precision: 18, scale: 2),
Prop3 = c.Decimal(nullable: false, precision: 18, scale: 2),
...
PropN= c.Decimal(nullable: false, precision: 18, scale: 2),
})
.PrimaryKey(t => t.RowId);
}
答案 0 :(得分:2)
一个班级超过1000个属性对我来说太过分了,真的!
抛开这个问题很可能不是那个问题。 StackOverflowException
表示无限递归。可能存在引用自身的EF字段/属性,从而创建无限循环。
我建议禁用一些字段,然后尝试编译它,并继续这样做,直到找到有问题的行。