如何使用Entity Framework Core将SQL数据从一个表传输到另一个表

时间:2019-04-20 19:32:54

标签: c# .net entity-framework .net-core entity-framework-core

我的数据库中有两个包含相同列的表。 TBL 1和TBL 2是历史表。在将数据输入到TBL 1中时,我想使用EF Core 2.2将所有数据从TBL 1移到Tbl 2(作为历史数据)。

我不想编写不必要的循环来使代码丑陋。

var MyEntity = new MyEntities();
var TBL1 = MyEntity.TBL1.Find();
var TBL2 = new TBL2();

TBL2.CurrentValues.SetValues(TBL1); 
//CurrentValues is not accept in code. Giving me build error

MyEntity.TB2.Add(data2);
MyEntity.TB1.Remove(data1);
MyEntity.SaveChanges();

我需要做的就是使用EF并避免循环将SQL数据从表1复制到表2。任何使用mapper的示例或任何可行的方法都会有所帮助。

1 个答案:

答案 0 :(得分:0)

将导航属性添加到您的TBL2模型:

public TBL1 TBL1 { get; set; }

像这样向您的TBL1模型添加投影:

public static Expression<Func<TBL1, TBL2>> Projection
{
    return tbl1 => new TBL2
    {
        Prop1 = tbl1.Prop1,
        Prop2 = tbl1.Prop2,
        TBL1 = tbl1,
    };
}

并使用投影来具有TBL1和TBL2的实例,如下所示:

var MyEntity = new MyEntities();
var tbl2 = MyEntity.TBL1.Where(x => x.Id == id).Select(TBL1.Projection).SingleOrDefault();
vat tbl1 = tbl2.TBL1;

MyEntity.TB2.Add(tbl2);
MyEntity.TB1.Remove(tbl1);
MyEntity.SaveChanges();