gpt4 book ai didi

entity-framework - 运行时 Entity Framework 表名映射

转载 作者:行者123 更新时间:2023-12-02 01:41:06 24 4
gpt4 key购买 nike

我需要在不中断数据库工作的情况下导入大量数据。所以有两个表:Data 和 DataTemp(它们是相同的)。首先将数据上传到临时表,然后通过备份 Data 表并将 DataTemp 重命名为 Data 来交换表(此示例已简化 - 有两个以上的表)。本项目使用 Entity Framework 。

所以问题是:是否可以使用 Entity Framework 来使用 DataTemp 而无需复制模式中的数据表?有没有办法在执行临时替换表名之前编辑最终的sql? OnModelCreating 不适合,因为它被调用了一次,但我需要在不同时间使用两个表。

谢谢!

最佳答案

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();
}

WriteLine 的 SQL 输出:

            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();
}

WriteLine 的 SQL 输出:

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

关于entity-framework - 运行时 Entity Framework 表名映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28581409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com