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



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

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));
}

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

尝试使用 ValueInjector 或 AutoMapper 来帮助您将类似的字段从源对象映射到目标对象,然后只需将生成的目标对象插入数据库即可。下面是有关如何使用这些 nuget 的一些示例。 ValueInector 和 AutoMapper

最新更新