首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityFramework -如何获取ObjectSet<T>

EntityFramework -如何获取ObjectSet<T>
EN

Stack Overflow用户
提问于 2013-04-26 17:11:27
回答 1查看 1.5K关注 0票数 1

我和asp.net mvc3一起工作。

我有一个创建了ADO.NET实体数据模型的edmx。(数据优先)

TestDb.Designer.cs

代码语言:javascript
复制
namespace Test.Web.DataModel
{
    public partial class TestDbContext : ObjectContext
    {
         public ObjectSet<T_Members> T_Members { ... }
         public ObjectSet<T_Documents> T_Documents { ... }
         ....
    }
}

如何通过名称(字符串)获取ObjectSet?

例如,我想成为这样的人。

代码语言:javascript
复制
var members = context.GetTable("T_Members"); // var members = context.T_Members;
EN

回答 1

Stack Overflow用户

发布于 2013-04-26 19:02:09

我对ObjectContext的内部结构不是很熟悉,所以可能有一种更“原生”的方式,

...but你需要的是一些reflection来把你的属性弄出来。

(注意:我没有任何db-first手边可以检查,所以你需要调整一些拼写错误,尽管如此)

代码语言:javascript
复制
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);
}

并像这样使用它

代码语言:javascript
复制
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 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16232730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档