2017-05-05 56 views
0

我想爲這個問題想出一個整潔的解決方案,使其可擴展。我有一個DataTable dt,它的結構從數據庫中讀取。我希望能夠使用實體框架將這些數據正確地映射到正確的字段中,並允許代碼即使在添加或刪除列時也能正常工作。通過強類型字段循環實體框架c#

using (Entities db = new Entities()) 
{ 
    foreach (DataRow dr in dt.Rows) 
    { 
     var result = db.myTable.SingleOrDefault(e => e.Email == dr["Email"].ToString()); 

     foreach (SourceToDestinationMapping s in mapping) 
     { 
      // want to do something like this 
      result[s.DestinationColumn] = dt[s.DestinationColumn]; 

      // instead of this 
      result.Name = dt["Name"].ToString(); 
      result.Address = dt["Address"].ToString(); 
      // all field mappings 
     } 
    } 
} 

這東西是可能的嗎?或者每次添加/刪除新列時是否需要更改代碼?如果這不是有效的話,那麼我可以在沒有Entity Framework的情況下切換到這樣的事情。

編輯:

例子是: 1,EmailAddress的,電子郵件,1

public partial class SourceToDestinationMapping 
{ 
    public int MappingId { get; set; } 
    public string SourceColumn { get; set; } 
    public string DestinationColumn { get; set; } 
    public bool Active { get; set; } 
} 
+0

我們可以看到'SourceToDestinationMapping'類嗎? –

+0

Automapper呢? https://www.geekytidbits.com/automapper-with-datatables/ –

+0

@WilliamXifaras我不知道這對我有效,因爲如果我要添加/刪除列,那麼我需要編輯匹配數據表的類 –

回答

0

由於實體框架處理對象,你需要使用反射不知道來獲取和設置其屬性你需要操作的屬性,如果你有很多類型需要處理,它會變得非常複雜。因此,基本上檢查您正在查看的對象的類型,獲取其屬性列表,並搜索與數據表格行中屬性(或其他約定)名稱相同的列。但是,如果屬性是int,則需要處理類型轉換,您需要處理類型轉換,您需要將單元格值作爲int等。

+0

嗯,這個表格大約有75列不同的類型。因此,使用實體框架可能比僅僅使用不同的方法工作太多了? –

+0

可能,這是由你來衡量利弊:)除非你希望在多個地方使用相同的東西,它可能是不值得的。 –