我有一个POCO实体如下:
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)?
查找外键属性,只需使用@Ashraf对这个问题的回答。
我找不到任何类似的发现DatabaseGenerated属性,同时保持流畅的API。如果你愿意在你的POCO上放一个数据注释,你应该能够使用反射抓取它,就像任何其他属性一样(类似于在这篇博客文章中所做的):
typeof(Entity).GetProperties().Where(prop => prop.GetCustomAttributes(typeof (DatabaseGeneratedAttribute), true).Any());
这将返回一个IEnumerable><PropertyInfo>
,然后您应该可以使用它。