Как разделить 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