我试图为此问题提出一个整洁的解决方案,以使其可扩展。我有一个DataTable
DT,其结构从数据库中读取。我希望能够使用实体框架正确地将此数据映射到正确的字段中,即使添加或删除了列,也允许代码运行。
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
}
}
}
这是可以做的吗?还是每次添加/删除新列时都需要进行代码更改?如果这不是有效的东西,那么我可以切换到没有实体框架的情况下进行这样的事情。
编辑:
示例是:1,电子邮件address,电子邮件,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; }
}
,因为实体框架与您需要使用反射的对象来获取和设置属性,而无需知道您需要操作哪些属性,并且如果您有多种类型,它可能会变得非常复杂您需要处理。因此,基本上检查您要查看的对象的类型,获取其属性列表,并在数据表行中搜索与属性(或其他约定(相同名称的列。但是,同样,您需要处理类型转换,如果属性是int,则需要将单元格值作为int等。