2015-09-22 44 views
0

有DB上下文和定義的實體類,如下所示:我如何獲得實體類的實體框架代碼優先的屬性在運行時

public class DBContext : DbContext 
{ 
    public DBContext() 
     : base("name=DbConnectionString") 
    { } 

    public virtual DbSet<Foo> Foos { get; set; } 
} 

public class Foo 
{ 
    [Key] 
    public long FooID { get; set; } 
    public string Bar1 { get; set; } 
    public string Bar2 { get; set; } 
} 

我想在運行時得到類Foo的屬性。我試過反思:

DBContext db = new DBContext(dbConnString); 
db.Database.CreateIfNotExists(); 
List<PropertyInfo> properties = db.Foos.GetType().GetProperties(); 

此代碼不能編譯。我如何獲得Foo類的屬性?謝謝!

+0

哪個編譯錯誤你會得到? – ThiagoPXP

+0

您在這裏發佈的代碼不應該有任何錯誤,必須有其他代碼。它也應該是'typeof(Foo)'而不是'db.Foos.GetType()'。啊,我猜這個例外是'NullReferenceException'? 'Foos'沒有在你的上下文的構造函數中初始化。但是,使用'typeof(Foo)' – Hopeless

+0

db.Foos.GetType()時,無關緊要,因爲您沒有指定程序集,所以它將返回DbSet 或(更可能)爲null。如建議,使用typeof()而不是GetType()。 – DevilSuichiro

回答

0

謝謝大家。解決方案如下:

DBContext db = new DBContext(dbConnString); 
db.Database.CreateIfNotExists(); 
PropertyInfo[] properties = typeof(Foos).GetProperties(); 
foreach (var prop in properties) 
{ 
    process(prop.Name); 
}