实体框架:如何动态检索列的DatabaseGeneratedOptions和导航属性的外键列



我有一个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>,然后您应该可以使用它。

相关内容

  • 没有找到相关文章

最新更新