Entity framework 6 将数据从一个表复制到另一个表,而不映射所有字段(实体框架)

Entity framework 6 将数据从一个表复制到另一个表,而不映射所有字段(实体框架),entity-framework-6,Entity Framework 6,许多类似的问题,但我找不到一个简单的解决办法。我想将下面查询的结果插入到存档表中 var record = (from a in db.contacts where a.id == 1 select a).FirstOrDefault(); 如果表只有几列,那么这样添加也不会有问题 contacts_archive ca = new contacts_archive() {

许多类似的问题,但我找不到一个简单的解决办法。我想将下面查询的结果插入到存档表中

     var record = (from a in db.contacts
                      where a.id == 1
                      select a).FirstOrDefault();
如果表只有几列,那么这样添加也不会有问题

    contacts_archive ca = new contacts_archive()
        {
            ca.id = record.id,
            ca.name = record.name,
            .....
        };

db.contacts_archive.Add(ca)

但是如果我的表有一百列呢?有更好(更快)的方法吗?

如果属性名称完全匹配,您可以使用AutoMapper或Mapster等自动映射器来完成此操作。否则,如果不想麻烦地添加nuget包,您可以自己使用反射和循环属性

   contacts_archive ca = new contacts_archive();
   var archiveProps = ca.GetType().GetProperties();
   foreach (var prop in record.GetType().GetProperties()) {
      if (!archiveProps.Any(a => a.Name == prop.Name)) {
          continue;
      }
      prop.SetValue(ca, prop.GetValue(record));
   }

不过,这假设您的名称和属性类型完全匹配。

如果属性名称完全匹配,您可以使用AutoMapper或Mapster之类的自动映射器来完成此操作。否则,如果不想麻烦地添加nuget包,您可以自己使用反射和循环属性

   contacts_archive ca = new contacts_archive();
   var archiveProps = ca.GetType().GetProperties();
   foreach (var prop in record.GetType().GetProperties()) {
      if (!archiveProps.Any(a => a.Name == prop.Name)) {
          continue;
      }
      prop.SetValue(ca, prop.GetValue(record));
   }
这假设您的名称和属性类型完全匹配。

尝试使用或帮助您将类似字段从源对象映射到目标对象,然后将生成的目标对象插入数据库。下面是一些关于如何使用这些NUGET的示例。 和

尝试使用或帮助您将类似字段从源对象映射到目标对象,然后将生成的目标对象插入数据库。下面是一些关于如何使用这些NUGET的示例。
而且

除非他们最近更改了,否则我不会使用ValueInjector。这是迄今为止最慢的。除非他们最近改变它,否则我不会使用ValueInjector。这是迄今为止最慢的。