我的数据库中有两个包含相同列的表。 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的示例或任何可行的方法都会有所帮助。
答案 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();