Как разделить InMemory Db между контекстами чтения и записи

Я работаю над проектом, который должен поддерживать чтение БД и запись БД. Я решил создать два контекста соответственно. У меня есть веб-API для взаимодействия с БД. У меня есть конечная точка создает пользователя, а другая получает пользователя по идентификатору. Проблема, с которой я сталкиваюсь, связана с сервером разработки и локальными экземплярами, где используется InMemory Db, поскольку разработка идет довольно быстро. Проблема заключается в том, что контекст чтения не дает мне данные, которые я хранил в контексте записи. Он думает, что стол пуст. После дальнейшего изучения с помощью отладчика я могу перемещаться и находить "пропущенные" данные. Я не уверен, что не так.

Действия по воспроизведению

Вот иллюстрация того, что у меня есть в моем проекте

public class WriteContext : IdentityDbContext<User>
{
  public WriteContext(DbContextOptions<WriteContext> options) : base(options) {}
}

public class ReadContext : IdentityDbContext<User>
{
  public ReadContext(DbContextOptions<ReadContext> options) : base(options) {}
}

public class UserController : Controller
{
  private readonly WriteContext _write;
  private readonly ReadContext _read;

  // constructor injection here

  // attributes...
  public IActionResult Post(UserModel model)
  {
    var user = // map model to User
    _write.Users.Add(user);
    _write.SaveChanges();
    return Ok(user);
  }

  // attributes...
  public IActionResult Get(string userId)
  {
    var user = _read.Users.SingleOrDefault(x => x.Id == userId);
    return Ok(user);
  }
}

public class Startup
{
  public void ConfigureServices(IServiceCollection services)
  {
    // other stuff...

    services.AddDbContext<WriteContext>(options => options.UseInMemoryDatabase("MemDb"));
    services.AddDbContext<ReadContext>(options => options.UseInMemoryDatabase("MemDb"));

    // other stuff
  }

  // other stuff
}

Добавьте пользователя через контекст записи, а затем попробуйте выбрать пользователя через контекст чтения.

Дальнейшие технические детали

Версия EF Core: 2.0.1 Поставщик базы данных: InMemory Операционная система: macOS Sierra IDE: Jetbrains Rider 2017.2

Соответствующий выпуск GitHub

0 ответов

Другие вопросы по тегам