Несколько баз данных в памяти с одним именем - PullRequest
0 голосов
/ 15 января 2019

В отношении этого ответа я пытаюсь заставить работать несколько контекстов, установив UseInMemoryDatabase с тем же именем. Тест ниже не пройден, а secondContext пуст.

Что еще мне нужно сделать, чтобы разделить это в базе данных памяти?

[Test]
public void MultipleContextTest()
{
    var firstContext = new FirstContext(new DbContextOptionsBuilder<FirstContext>().UseInMemoryDatabase("DB").Options);
    firstContext.Add(new Entity() {Name = "Test"});
    firstContext.SaveChanges();

    var secondContext = new SecondContext(new DbContextOptionsBuilder<SecondContext>().UseInMemoryDatabase("DB").Options);

    Assert.AreEqual(1, secondContext.Entity.Count());
}

public class FirstContext : DbContext
{
    public DbSet<Entity> Entity { get; set; }

    public FirstContext(DbContextOptions options) : base(options)
    {

    }
}

public class SecondContext : DbContext
{
    public DbSet<Entity> Entity { get; set; }

    public SecondContext(DbContextOptions options) : base(options)
    {

    }
}

public class Entity
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
}

1 Ответ

0 голосов
/ 15 января 2019

Я заработал, установив InMemoryDatabaseRoot для одного и того же объекта во всех контекстах.

private InMemoryDatabaseRoot _root;
private InMemoryDatabaseRoot Root
{
    get
    {
        if(_root == null)
            _root = new InMemoryDatabaseRoot();

        return _root;
    }
}

[Test]
public void MultipleContextTest()
{
    var firstContext = new FirstContext(CreateOptions<FirstContext>());
    firstContext.Add(new Entity() {Name = "Test"});
    firstContext.SaveChanges();

    var secondContext = new SecondContext(CreateOptions<SecondContext>());


    Assert.AreEqual(firstContext.Entity.Count(), secondContext.Entity.Count());
}

private DbContextOptions CreateOptions<T>() where T : DbContext
{
    return new DbContextOptionsBuilder<T>()
        .UseInMemoryDatabase("DB", Root)
        .Options;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...