我正在尝试为此问题提出一个简洁的解决方案,以使其可扩展。我有一个DataTable
dt,它的结构是从数据库中读取的。我希望能够使用Entity Framework将此数据正确映射到正确的字段,并允许代码即使添加或删除列也能正常运行。
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,EmailAddress,Email,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 :(得分:0)
由于Entity Framework与对象一起工作,您需要使用反射来获取和设置属性,而不需要知道您需要操作哪些属性,如果您需要处理许多类型,它会变得非常复杂。因此,基本上检查您正在查看的对象的类型,获取其属性列表,并在数据表行中搜索与属性(或您拥有的其他约定)同名的列。但同样,您需要处理类型转换,如果属性是int,则需要将单元格值作为int等。