2013-01-07 54 views
0

我有一個POCO實體如下:實體框架:如何動態檢索列和外鍵列DatabaseGeneratedOptions導航性能?

public class Entity { 
    public int Id { get; set; } 
    public int? OtherEntityId { get; set; } 
    public virtual OtherEntity OtherEntity { get; set; } 
} 

代碼優先配置如下:

conf.HasKey(e => e.Id).ToTable("entities"); 
conf.Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
conf.HasOptional(e => e.OtherEntity).WithMany().HasForeignKey(e => e.OtherEntityId); 

我想能夠檢索數據庫生成選項& FK特性在運行。例如,我可以動態檢索主鍵屬性,如下所示:

var keyProperties = objectContext.CreateObjectSet<Entity>() 
    .EntitySet 
    .ElementType 
    .KeyMembers 
    .Select(km => typeof(Entity).GetProperty(km.Name)); 
    .ToList() 

我該怎麼做(我正在使用EF 4.3.1)?

回答

2

爲了查找外鍵的屬性,只需要使用@阿什拉夫對this SO question答案。

我無法找到找到DatabaseGenerated屬性,同時保持良好的API類似的事情。如果你願意把數據註解你的POCO,你應該能夠抓住它使用反射,就像任何其他屬性(類似於什麼正在上this blog post完成):

typeof(Entity).GetProperties().Where(prop => prop.GetCustomAttributes(typeof (DatabaseGeneratedAttribute), true).Any()); 

這將返回IEnumerable><PropertyInfo>,你應該可以隨時隨地玩。