我知道标题不是最好的,但这是我真正想要完成的。
我有一个代表 Entity1 及其关联的详细信息视图。我正在捕获键/值对中的属性名称和值。我目前正在使用反射将实体属性设置为非关联的相应值。我怀疑这是最有效的方法,但我一直无法找到使用表达式树的更好方法。所以现在我需要根据那些实体关联的主键来设置Entity1与其对应实体的关联,称它们为Entity2-4。
在迭代Entity1的Properties时,不知道如何构造一个对Entity2-4的动态查询,并将Entity1.association设置为对应的实体。这是我到目前为止的代码:
foreach (string k in e.Values.Keys)
{
if (e.Values[k] != null && !String.IsNullOrEmpty(e.Values[k].ToString()))
{
System.Type objectType = Entity1.GetType();
PropertyInfo[] p = objectType.GetProperties();
foreach (PropertyInfo pi in p)
{
// set Entity1.Property for non associations (works just fine)
if (pi.Name == k)
{
System.Type t = pi.PropertyType;
pi.SetProperty(e.Values[k].ToString(), Entity1);
break;
}
// when i see pi.Name contain Reference, I know I'm working on an association
else if (pi.Name.Contains("Reference"))
{
// k is in the form of Entity.Property
var name = pi.Name.Left("Reference");
var keys = k.Split('.');
var ent = keys[0];
var prop = keys[1];
if (name == ent)
{
// here I need to obtain an instance from the db
// ie generate my dynamic query to the Entity with the name
// contained within the var "ent"
// I tried using reflection and could instantiate the entity
// but it did me no good as I needed the entity from the db
var entityInstance = some dynamic query;
// here I need to set the association of Entity1 to entityInstance from above
// normally I would use reflection, but I'm not sure that would work
// since EntityReference is the actual property returned by reflection
Entity1.SetAssocation(prop, Entity2);
break;
}
}
}
}
}
编辑
我基本上需要构造实体及其关联实体,以便我可以将它们提交到数据上下文。实体 2 到 4 存在于数据库中,我需要查询数据库以获取实例,我可以将它们关联到我正在创建并要提交的新实体 1。
我的基本模型:
实体1
Entity1.ID
Entity1.Prop1
Entity1.Prop2
Entity1.Prop3
Entity1.Entity2
Entity1.Entity3
Entity1.Entity4
实体2
Entity2.ID
Entity2.Name
实体3
Entity3.ID
Entity3.Name
实体4
Entity4.ID
Entity4.Name