У меня есть два разных DbContexts с разными типами сущностей (!) , которые совместно используют одну и ту же базу данных.Я хочу использовать в памяти DbContext через Microsoft.EntityFrameworkCore.InMemory.Проблема: я не могу сопоставить Entity2 Context2 с той же таблицей, где хранится Entity1 Context1.Если я использую одинаковые сущности , это работает, но не для разных сущностей.
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Xunit;
namespace EntityFrameworkCoreLabs
{
public class Context1 : DbContext
{
public Context1(DbContextOptions options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity1>().ToTable("SharedEntities");
}
}
public class Context2 : DbContext
{
public Context2(DbContextOptions options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Map to same table as in Context1
modelBuilder.Entity<Entity2>().ToTable("SharedEntities");
}
}
/// <summary>
/// Entity from Context1 mapped to table "SharedEntities"
/// </summary>
public class Entity1
{
public int Id { get; set; }
}
/// <summary>
/// Entity from Context2 mapped to table "SharedEntities"
/// </summary>
public class Entity2
{
public int Id { get; set; }
public string Name { get; set; }
}
public class InMemoryTest
{
public static InMemoryDatabaseRoot DatabaseRoot = new InMemoryDatabaseRoot();
[Fact]
public void ShareDifferentContexts()
{
var options = new DbContextOptionsBuilder()
.UseInMemoryDatabase("Shared", DatabaseRoot)
.Options;
using (var context1 = new Context1(options))
{
// Step 1: add Entity1 to table "SharedEntities"
context1.Set<Entity1>().Add(new Entity1());
context1.SaveChanges();
}
using (var context2 = new Context2(options))
{
// Step 1: get Entity2 from table "SharedEntities"
// Failure Expected: 1 Actual: 0
Assert.NotNull(context2.Set<Entity2>().FirstOrDefault());
}
}
}
}