Добрый день,
Мне не удается вставить несколько записей в ядро 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, он работал как шарм.