EF core Не вставляет все записи для InMemoryDatabase - PullRequest
0 голосов
/ 08 октября 2019

Добрый день,

Мне не удается вставить несколько записей в ядро ​​EF с использованием базы данных InMemory. Под неудачей я подразумеваю, что это работает, но кажется, что он не вставляет все записи.

Это мой код для вставки:

            var f1= new F1[]{ /* Where I have populated this*/}
            await context.F1.AddRangeAsync(f1);

            var f2= new F2[]{ /* Where I have populated this*/}
            await context.f2.AddRangeAsync(f2);

            var f3= new F3[]{ /* Where I have populated this*/}
            await context.F3.AddRangeAsync(f3);

            var f4= new F4[]{ /* Where I have populated this*/}
            await context.F4.AddRangeAsync(f4);

            var f5= new F5[]{ /* Where I have populated this*/}
            await context.F5.AddRangeAsync(f5);

            var f6= new F6[]{ /* Where I have populated this*/}
            await context.F6.AddRangeAsync(f6);

            var f7= new F7[]{ /* Where I have populated this*/}
            await context.F7.AddRangeAsync(f7);

            await context.SaveChangesAsync();

Где каждая коллекция имеет минимум 2 элемента имаксимум 100.

После запуска этого кода:

            var f1= await context.F1.ToListAsync();
            var f2= await context.F2.ToListAsync();
            var f3= await context.F3.ToListAsync();
            var f4= await context.F4.ToListAsync();
            var f5= await context.F5.ToListAsync();
            var f6= await context.F6.ToListAsync();
            var f7= await context.F7.ToListAsync();

И точки останова после линии f7 и наведения на коллекции, я вижу, что все они имеют только часть элементов.

Вот как я создаю базу данных в памяти:

services.AddDbContext<FamousDbContext>(opt => opt.UseInMemoryDatabase("MyFamousDatabase"));

Что я пробовал до сих пор: 1. Я пытался сохранять (вызывать SaveChanges) каждый раз, когда элемент / коллекциядобавлен. 2. Попытка не использовать асинхронный для вставки. 3. попытался вставить только одну коллекцию, а затем только просить на DbSet. 4. Пробная исследовательская документация на ядро ​​EF. 5. Попытался изменить имя базы данных в памяти.

Я предполагаю, что это ограничение InMemory Core, но я не могу подтвердить это без достаточных знаний и не нахожу ничего упомянутого в документации или где-либо еще.

Итак, мой вопрос: как мне обойти это? Это ограничение использования InMemory Db? Или я что-то не так делаю?

ОБНОВЛЕНИЕ:

Я использую .NET core 2.2 и версию EF InMemory: 2.2.4

ОБНОВЛЕНИЕ ОБНОВЛЕНО:

Мне удалось решить проблему, кажется, по той причине, что ядро ​​EF InMemory на самом деле не поддерживает реляционную базу данных, хотя я читал ее, я не думал, что это было из-за этого, пока я не прошел через попытку и ошибку sessio, источник: https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/in-memory. Потому что, когда я пытаюсь предварительно заполнить данные, каждый из объектов ниже "f1" имеет ссылку на тип F1 следующим образом:

public int F1Id {get;set}
public F1 F1 {get;set;}

Как толькотак как я удалил ссылку на объект из всех объектов и оставил только F1Id, он работал как шарм.

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