2017-04-03 83 views
0

許多類似的問題,但我找不到一個簡單的解決方案。我想將下面的查詢結果插入到一個存檔表中。將數據從一個表複製到另一個表而不映射所有字段(實體框架)

 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) 

但如果我的表有百柱是什麼?有更好(更快)的方法嗎?

回答

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

嘗試使用ValueInjectorAutoMapper來幫助您將源對象中的類似字段映射到目標對象,然後將生成的目標對象插入到數據庫中。這裏有一些關於如何使用這些nugets的例子。 ValueInectorAutoMapper

+0

除非他們最近改變了它,否則我不會使用ValueInjector。這是迄今爲止最慢的。 –

相關問題