我正在尝试使用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
属性。
怎么做?
答案 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来探索实体类型及其属性。