我和asp.net mvc3一起工作。
我有一个创建了ADO.NET实体数据模型的edmx。(数据优先)
TestDb.Designer.cs
namespace Test.Web.DataModel
{
public partial class TestDbContext : ObjectContext
{
public ObjectSet<T_Members> T_Members { ... }
public ObjectSet<T_Documents> T_Documents { ... }
....
}
}如何通过名称(字符串)获取ObjectSet?
例如,我想成为这样的人。
var members = context.GetTable("T_Members"); // var members = context.T_Members;发布于 2013-04-26 19:02:09
我对ObjectContext的内部结构不是很熟悉,所以可能有一种更“原生”的方式,
...but你需要的是一些reflection来把你的属性弄出来。
(注意:我没有任何db-first手边可以检查,所以你需要调整一些拼写错误,尽管如此)
public static object GetTableFromName(this TestDbContext db, string propertyName)
{
PropertyInfo property = null;
property = typeof(TestDbContext)
.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public);
return property.GetValue(db, null);
}
public static object GetTableFromType(this TestDbContext db, string tableTypeName)
{
// var tableType = typeof(TestDbContext).Assembly.GetType("YourNamespace.T_Members");
var tableType = Type.GetType(tableTypeName);
var genericType = typeof(ObjectSet<>).MakeGenericType(new[] { tableType });
var property = typeof(TestDbContext)
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(x => x.PropertyType == genericType).FirstOrDefault();
return property.GetValue(db, null);
}并像这样使用它
var table = db.GetTableFromName("T_Members");
table = db.GetTableFromType("YourNamespace.T_Members);
// this gets you the `object` you'd still need to 'cast' or something https://stackoverflow.com/questions/16232730
复制相似问题