如何使用EF6中的表名获取实体及其属性和类型

时间:2014-06-12 06:03:54

标签: c# entity-framework linq-to-sql

我正在尝试使用EF6中的表名读取实体属性及其类型。例如

public partial class ContextEntities : DbContext
{
    public virtual DbSet<tblNote> tblNotes { get; set; }
}

public partial class tblNote
{
    public int intNoteID { get; set; }
    public string strLoanNumber { get; set; }
}

我在字符串中有一个名为"tblNote"的实体名称。通过使用此表名,我想获得tblNote实体及其属性和类型。

所以我确实喜欢这个

List<Reflection.PropertyInfo> props = new List<Reflection.PropertyInfo>();

PropertyInfo entityProperty = contextEntities.GetType().GetProperties().
                              Where(t => t.Name == "tblNote").Single();
if ((entityProperty != null))
    props.Add(entityProperty); 

这不起作用。我只获得contextEntities属性。 怎么做?

1 个答案:

答案 0 :(得分:2)

使用此查询:

        var tblNoteProperties = contextEntities
            .GetType()
            .GetProperties()
            .Where(p =>
                p.PropertyType.IsGenericType &&
                p.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>))
            .Select(p => p.PropertyType.GetGenericArguments()[0])
            .Where(t => t.Name == "tblNote")
            .SelectMany(t => t.GetProperties())
            .ToArray();

请注意,该模型可以动态构建,而无需在DbSet<T>派生类型上声明DbContext属性。在这种情况下,您应该使用EDM来探索实体类型及其属性。