如何使用EF将数据从一张表“传输”到另一张表?

Eve*_*ger 4 entity-framework

我的数据库中有两个包含相同列的表。我在一个表(名为 TB1)中有一个记录,我想使用 EF 将它“传输”到另一个表(名为 TB2)。

我对EF不是很熟悉,所以我的想法是在这个方向:

var testEntity = new TestEntities();
var data1 = testEntity.TB1.Find(id);
var data2 = new TB2();

// Pass all the properties from one object (data1) to another (data2)

testEntity.TB2.Add(data2);
testEntity.TB1.Remove(data1);
testEntity.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

但是,为了继续这个逻辑,我必须手动将所有属性从一个对象传递到另一个对象。并且它包含很多属性(大约 50 个)。

由于它们具有相同的属性,我真的认为必须有一种更简单的方法来执行这个过程,但我不知道如何。

有没有更简单的方法来“传输”这些数据?

Cla*_*ies 8

实体框架具有处理复制对象属性的功能。请参阅https://msdn.microsoft.com/en-us/data/jj592677.aspx

最简单的方法是使用CurrentValues.SetValues().

var testEntity = new TestEntities();
var data1 = testEntity.TB1.Find(id);
var data2 = new TB2();

data2.CurrentValues.SetValues(data1);

testEntity.TB2.Add(data2);
testEntity.TB1.Remove(data1);
testEntity.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

当使用从服务调用或 n 层应用程序中的客户端获取的值更新实体时,有时会使用此技术。请注意,使用的对象不必与实体具有相同的类型,只要它具有名称与实体名称匹配的属性即可。

  • 我用 EF Core 3.0 测试了这个答案,它有效。@DarrenNavitas,语法为 dbcontext.Entry(data2).CurrentValues.SetValues(data1) (2认同)