RemoveDataRecord <tentity>(int id) - 动态设置TEntity </tentity>

时间:2011-11-11 19:38:13

标签: c# reflection

var repo = new MyRepo();
repo.RemoveDataRecord<MyProj.Data.Person>(5);

上面从我的linq中的Person表中删除了一条记录到sql repository。

这就是我想做的事情:

var repo = new MyRepo();
repo.RemoveDataRecord<"MyProj.Data.OrderItem">(17);

目的:每个管理页面都有一个记录表,每个记录都有一个“删除”链接,如下所示:

<a href="#" id="17" type="MyProj.Data.OrderItem">delete</a>

所以我可以抓住id和要删除的项目类型。

这可能吗?像repo.RemoveDataRecord&lt;“MyProj.Data.OrderItem”&gt;(17); ?我假设我需要反思。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

首先,让我们获取您的实体类型的类型反映:

var targetEntityType = Type.GetType("MyProj.Data.OrderItem");

然后,我们需要反映一般的RemoveDataRecord方法定义

MethodInfo genericMethodDefinition = typeof(MyRepo).GetMethod("RemoveDataRecord");

请参阅此处,如何以可重复的方式执行此操作:Is there a C# equivalent of typeof for properties/methods/members?

现在,每次你必须调用这个方法时,你应该: 基于泛型方法定义获得泛型方法的反映:

MethodInfo genericMethod = genericMethodDefinition.MakeGenericMethod(targetEntityType);

并调用它:

genericMethod.Invoke(repo, new object[] { 17 });