根据字符串值一般获取字段或实体

时间:2014-01-27 16:06:08

标签: c# entity-framework generics

我正在尝试为应用程序编写包装函数。

此应用程序将不断添加实体,因此如果我们可以编写一个通用函数而不是必须为每个项目创建一个例外,那就更好了。

出于某些原因,我们同时保留GUID和int键。

当一个int键被更新时,我们需要在子记录的父记录中更新它,但是因为在任何给定的时间可能有多个具有相同int键的子记录,我们需要得到一个我们想要更新的Guids列表。

这是我想要做的一些伪代码。

 List<string> depenedents = new List<string>();
 depenedents.add(table1);
 depenedents.add(table2);
 depenedents.add(table3);

 for(item in depenedents) 
 {
     context.set<type item>();
     entities.getguid();
 }

显然这里的问题是for循环。

是否可以获取只知道实体类型字符串的实体列表?幸运的是,我们所有的实体都被包装到一个带有get guid方法的基类,但我需要找到一种实际获取实体的方法。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

类似的东西:

     for(item in depenedents) 
 {
     context.GetMethod("Set")
         .MakeGenericType(Type.GetType(item))
         .Invoke(context, new object[0]);

     entities.GetType.GetMethod("GetGuid").Invoke(entities, new object[0]);
 }

......应该大致满足您的需求。这将调用Set通用实例方法的正确类型特化。然后它将在实体对象上调用名为“GetGuid”的实例方法。

或者可能:

foreach(var entity in entities)
{
    entity.GetType.GetMethod("GetGuid").Invoke(entities, new object[0]);
}

您可能希望对返回的值执行某些操作,但希望此答案会指向正确的方向!

(显然你可以大大优化这段代码来缓存反射的类型和方法,或者使用编译的表达式而不是Invoke()次调用)