2013-12-17 132 views
0

在我的應用程序中使用實體框架4。我簡單的設置,例如實體:實體框架4按名稱動態查詢實體

訂單:標識,代碼,名稱,StatusId,扇區

部門:ID,名稱,代碼

以下狀態:ID名稱,代碼

我必須將數據加載到表中訂單來自xls它具有如下結構:代碼(訂單),名稱,代碼(部門),代碼(狀態)。 因此,對於外鍵,我必須通過代碼查詢外鍵ID(對於扇區和狀態),然後分配到SectorId和StatusId; 我有幾十個領域的大桌子。所以我不想手動設置每個字段。 如果我知道結構如果xls我可以創建一個字典Dictionary其中key是字段的名稱(在Orders表中),value是xls中列的索引。 所以ID喜歡有類似

foreach(var item in Dictionary) 
{ 

///Determine if the field is Foreign key for Entity Order (for example in ObjectContext) using GetType().GetProperty().GetValue.... or something 

// If so query ObjectContext for the id of the entity that is foreign key using a value of Code from xls. 

} 

是否有可能實現的目標以及如何?請幫忙!

回答

0

非常令人失望,沒有人能幫助我。答案當然是思考。 正如在問題中提到的,我們可以創建一個從xls導入的實體屬性字典,其中屬性名稱爲鍵,xls列索引爲值。 然後將一個List> importData - 作爲導入的數據在foreach循環中遍歷xls的所有行。 然後通過字典循環,如果有名稱匹配鍵的實體屬性只需設置值。 應該有一些檢查。但舉個例子:

MyEntity editItem=new MyEntity(); 
foreach (List<string> data in importData) //loop each xls row 
{ 
    foreach (PropertyInfo pr in MyEntity.GetType().GetProperties()) 
    { 
     int excelindex = -1; 
      if (excelFields.Keys.Contains(pr.Name)) 
      { 
      excelFields.TryGetValue(pr.Name, out excelindex); 
      editItem.GetType().GetProperty(pr.Name).SetValue(editItem, Convert.ChangeType(data[excelindex], editItem.GetType).GetProperty(pr.Name).PropertyType), null); 
     } 
    } 
} 

這東西比較緊湊,然後數百個字段一個一個地發起,也有一些重用。因爲對於不同的實體你只需要生成新的字典,而主要的功能是相同的。