【发布时间】:2016-06-29 17:10:42
【问题描述】:
我正在使用 Entity Framework 4.0
在创建具有超过 1k 属性的新类时,我在创建迁移包后遇到问题。尝试编译项目时,我得到 Build Failed。 “csc.exe 已退出,代码为 255”
在查看更多细节时,我在构建日志中看到了这个消息:
使用程序集“C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Build.Tasks.CodeAnalysis.dll”中的“Csc”任务。
1>任务“Csc”
1> 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>
1> 进程因 StackOverflowException 而终止。
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.CSharp.Core.targets(67,5): error MSB6006: "csc.exe" exited with code 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);
}
【问题讨论】:
-
一个类中有 1k 个属性?!? o_O
-
确实如此。不是我每天都在做的事。
-
如果数据更多,那么你最终会出现内存不足异常...堆栈溢出异常意味着存在循环调用或递归调用,最终导致堆栈溢出异常
-
我在上面的问题中添加了代码。 “...” = 1k 更多相同。