Основные проблемы с созданием схем - PullRequest
0 голосов
/ 14 января 2019

Мне нужно создать схемы во время выполнения и скопировать туда существующие таблицы. DbContext:

public class TenantContext : DbContext
    {
        public TenantContext(string schemaName)
        {
            this.SchemaName = schemaName;
        }

        public string SchemaName { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);

            optionsBuilder
                .UseSqlServer("connString"); 
        }

        public virtual DbSet<TestEntity> TestEntities { get; set; }


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);


            modelBuilder.Entity<TestEntity>().ToTable("TestEntity", SchemaName);


        }
    }

Создание схемы:

    public void CreateSchema(SchemaRequest req)
    {
        TenantContext context = new TenantContext(req.Name);
        RelationalDatabaseCreator creator =
            (RelationalDatabaseCreator) context.Database.GetService<IRelationalDatabaseCreator>();
        creator.CreateTables();
    }

Когда я пытался проверить его, я создал "schema1.TestEntity", а когда я попытался создать "schema2.TestEntity", он дал мне System.Data.SqlClient.SqlException: 'There is already an object named 'TestEntity' in the database.' Тем не менее, когда я перезапустил приложение и снова попытался создать "schema2.TestEntity", он работал нормально, но выдал ту же ошибку при попытке создать третью схему. Что я делаю не так?

1 Ответ

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

Вы создаете ту же таблицу, поэтому ef обнаружит, что она у вас уже есть, и не позволит получить дубликат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...