Как сопоставить разные сущности в разных DbContexts, которые совместно используют одну и ту же базу данных с одной и той же таблицей, используя Microsoft.EntityFrameworkCore.InMemory? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть два разных 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());
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...