(注意,下面的代码只是示例。请不要评论为什么这是必要的。我希望肯定回答是或否,如果有可能,那么如何?如果不是也没关系。如果问题含糊不清,请告诉我。谢谢!)
示例,我可以获取ObjectSet< T >下面:
ObjectSet<Users> userSet = dbContext.CreateObjectSet<Users>();
ObjectSet<Categories> categorySet = dbContext.CreateObjectSet<Categories>();
上面的代码工作正常。但是,我需要实体表是动态的,所以我可以在类型之间切换。像下面的东西。
//var type = typeof(Users);
var type = typeof(Categories);
Object<type> objectSet = dbContext.CreateObjectSet<type>();
但上面的代码不会编译。
[编辑:] 我喜欢的是类似的东西,或类似的东西:
//string tableName = "Users";
string tableName = "Categories";
ObjectSet objectSet = dbContext.GetObjectSetByTableName(tablename);
答案 0 :(得分:6)
我已按照上述建议进行以下调整:
var type = Type.GetType(myTypeName);
var method = _ctx.GetType().GetMethod("CreateObjectSet", Type.EmptyTypes);
var generic = method.MakeGenericMethod(type);
dynamic objectSet = generic.Invoke(_ctx, null);
答案 1 :(得分:4)
您可以使用How do I use reflection to call a generic method?
中的示例吗?var type = typeof(Categories); // or Type.GetType("Categories") if you have a string
var method = dbContext.GetType.GetMethod("CreateObjectSet");
var generic = method.MakeGenericMethod(type);
generic.Invoke(dbContext, null);
答案 2 :(得分:0)
我在这里找到答案http://geekswithblogs.net/seanfao/archive/2009/12/03/136680.aspx。这非常好,因为它消除了EF映射的每个表的多个存储库对象,特别是对于像CRUD这样的普通操作,这正是我正在寻找的。 p>