Отображение имен таблиц структуры сущностей во время выполнения

Мне нужно импортировать огромное количество данных без прерывания работы БД. Итак, есть две таблицы: Data и DataTemp(они идентичны). Сначала данные загружаются во временную таблицу, а затем таблицы меняются местами путем резервного копирования таблицы данных и переименования DataTemp в данные (этот пример упрощен - там гораздо больше двух таблиц). Entity Framework используется в этом проекте.

Таким образом, вопрос заключается в следующем: возможно ли использовать структуру сущностей для использования DataTemp без дублирования таблицы данных в схеме? Есть ли способ отредактировать окончательный sql перед его выполнением, чтобы временно заменить имена таблиц? OnModelCreating не подходит, потому что он вызывается один раз, но мне нужно использовать обе таблицы в разное время.

Спасибо!

1 ответ

Решение
public class Datum
{
    public int Id { get; set; }
}

public class DataContext : DbContext
{
    public DbSet<Datum> Data { get; set; }
}

public class DataTempContext : DataContext
{
    protected override void OnModelCreating(DbModelBuilder builder)
    {
        base.OnModelCreating(builder);
        builder.Entity<Datum>().ToTable("DataTemp");
    }
}

РЕДАКТИРОВАТЬ

Это работает для меня.

Использование старого:

        using (var context = new DataContext())
        {
            // illustrate original table name, Data
            Console.WriteLine(context.Data.ToString());
            Console.WriteLine();

            // Add some real data, for LinqPad
            context.Data.Add(new Datum());
            context.SaveChanges();
        }

Вывод SQL по WriteLine:

            SELECT
                [Extent1].[Id] AS [Id],
                FROM [Data] AS [Extent1]            

Использование нового:

        using (var context1 = new DataContext())
        using (var context2 = new DataTempContext())
        {
            // copy old table to new
            foreach (var d in context1.Data)
                context2.Data.Add(d);
            context2.SaveChanges();
        }

        using (var context = new DataTempContext())
        {
            // illustrate different table name, DataTemp
            Console.WriteLine(context.Data.ToString());

            Console.ReadKey();
        }

Вывод SQL по WriteLine:

            SELECT
                [Extent1].[Id] AS [Id],
                FROM [DataTemp] AS [Extent1]
Другие вопросы по тегам