【问题标题】:EntityFramework - How to get ObjectSet<T>EntityFramework - 如何获取 ObjectSet<T>
【发布时间】:2013-04-26 19:02:09
【问题描述】:

我正在使用 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;

【问题讨论】:

    标签: entity-framework edmx


    【解决方案1】:

    我对@9​​87654321@ 的内部结构不太熟悉,所以可能会有更“原生”的方式,

    ...但是您需要一些 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 
    

    【讨论】:

    • @최종환 您应该将其标记为已回答 - 不客气,很高兴它有所帮助。
    猜你喜欢
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多