2013-12-17 196 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); 
     } 
    } 
} 

这东西比较紧凑,然后数百个字段一个一个地发起,也有一些重用。因为对于不同的实体你只需要生成新的字典,而主要的功能是相同的。