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

时间:2017-04-03 10:47:10

标签: entity-framework-6

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

     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)

但是,如果我的桌子有一百列呢?是否有更好(更快)的方式?

2 个答案:

答案 0 :(得分:1)

如果属性名称完全匹配,您可以使用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));
   }

这假设您的名字和属性类型完全匹配。

答案 1 :(得分:1)

尝试使用ValueInjectorAutoMapper帮助您将源对象中的类似字段映射到目标对象,然后将生成的目标对象插入到数据库中。以下是有关如何使用这些数据的一些示例。 ValueInectorAutoMapper