Stackoverflow Exception Entity Framework 3.1.3 при заполнении большого набора данных - PullRequest
0 голосов
/ 27 марта 2020

При запуске команды update-database на моем mssql сервере для заполнения большого набора данных, проанализированного из CSV, я получаю исключение stack overflow.

Я загружаю данные из нескольких устаревших CSV файлы в OnModelCreating.

Это большой набор данных, содержащий около 9,5 тыс. строк ввода, который разбит на несколько POCO.

-verbose не дает никакой дополнительной информации по этому вопросу, кроме как пытается применить миграцию.

Я использую Visual Studio 2019 Community и EntityFrameworkCore 3.1.3.

Могу ли я безопасно закомментировать некоторые посевные материалы (т. Е. 50% семян) в методе миграции up()?

Как бы я тогда безопасно заполнил оставшиеся данные? (Будет ли EF в методе OnModelBuilding проверять данные в следующем add-migration и генерировать недостающие данные?

1 Ответ

1 голос
/ 28 марта 2020

Ваш initialcreate.Up(MigrationBuilder) метод слишком велик и взрывает JITter. StackOverflow происходит, когда MSIL для метода компилируется в код машинного языка.

Это потому, что в методе слишком много кода вида

  migrationBuilder.InsertData(
        table: "Addresses",
        columns: new[] { "Id", "Address1", "Address2", "Address3", "Country", "DateCreated", "IsArchived", "IsPrimaryAddress", "LastModifiedDate", "LastModifiedUser", "NickName", "Notes", "PostCode", "Region", "Town" },
        values: new object[,]
        {
            { 1, "669A George Street", null, null, "", new DateTime(2020, 3, 28, 14, 58, 51, 108, DateTimeKind.Utc).AddTicks(1514), null, true, new DateTime(2020, 3, 28, 14, 58, 51, 108, DateTimeKind.Utc).AddTicks(1545), null, null, null, "AB25 3XP", "", "Aberdeen" },
            { 12307, "7 Moredon Road", null, null, "", new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8799), null, true, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8800), null, null, null, "SN25 3DQ ", "", "Swindon" },
            { 12306, "", null, null, null, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8735), null, false, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8736), null, null, null, null, null, null },
            { 12305, "67 HIGH STREET, ", null, null, "", new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8690), null, true, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8690), null, null, null, "TQ95 5NU", "", "TOTNES" },
            { 12304, "", null, null, null, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8577), null, false, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8579), null, null, null, null, null, null },
            { 12303, "BOWS KITCHEN, 10 MARGATE PLACE,", null, null, "", new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8530), null, true, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8531), null, null, null, "CT9 1EN", "", "MARGATE" },
            { 12302, "", null, null, null, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8464), null, false, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8465), null, null, null, null, null, null },
            { 12308, "", null, null, null, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8849), null, false, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8850), null, null, null, null, null, null },
            { 12301, "270 ST SAVIOURS RD", null, null, "", new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8417), null, true, new DateTime(2020, 3, 28, 14, 58, 51, 198, DateTimeKind.Utc).AddTicks(8418), null, null, null, "LE5 4HF", "", "LEICESTER" },

. Чтобы решить эту проблему, лучшим методом будет считывание данных для каждого InserData с диска перед каждым вызовом. Или встроить данные в исходный код, скажем, в JSON строки и преобразовать их в object[,] во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...