2016-03-14 2 views
1

Я использую Entity Framework 4.0Csc.exe бросает «Процесс прерван из-за StackOverflowException» при компиляции

При создании нового класса с чуть более 1k свойствами, которые я получаю проблему после создания пакета миграции. При попытке скомпилировать проект я получаю сообщение «Сбой сборки». "Csc.exe завершился с кодом 255"

При поиске более в детали, я вижу эту Msg в журнале сборки:

Использование "CSC" задачу из сборки «C: \ Program Files (x86) \ MSBuild \ 14,0 \ Bin \ Microsoft.Build.Tasks.CodeAnalysis.dll». 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> Процесс завершается из-за исключения StackOverflow. 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); 

    } 
+2

1k недвижимость в классе?!? o_O – andreasnico

+1

Действительно. Не то, что я делаю каждый день, вспоминаю вас. – WPFUser

+0

если данные больше, то вы получите исключение из памяти ... исключение переполнения стека означает, что существует циклический вызов или рекурсивный вызов, который заканчивается получением переполнения переполнения стека – Viru

ответ

2

Более 1000 свойств в классе, кажется, слишком много для меня, на самом деле!

Это откладывается, проблема, скорее всего, не такая. A StackOverflowException указывает на бесконечную рекурсию. Может быть поле/свойство EF, которое ссылается на себя, тем самым создавая бесконечный цикл.

Я предлагаю отключить несколько полей, попробуйте, если они скомпилируются, и продолжайте делать это, пока не найдете строку нарушения.

+0

Хорошее предложение. Однако свойства автоматически генерируются, а чистые get; задавать; свойства. Нет рекурсий. – WPFUser

+0

Атрибут может также вызвать такую ​​проблему. –

+0

Я обновил вопрос с образцом сгенерированного файла кода из сгенерированного сценария миграции – WPFUser

Смежные вопросы