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

本文关键字:DatabaseGeneratedOptions 导航 属性 检索 框架 何动态 动态 实体 | 更新日期: 2023-09-27 17:51:05

我有一个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)?

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

查找外键属性,只需使用@Ashraf对这个问题的回答。

我找不到任何类似的发现DatabaseGenerated属性,同时保持流畅的API。如果你愿意在你的POCO上放一个数据注释,你应该能够使用反射抓取它,就像任何其他属性一样(类似于在这篇博客文章中所做的):

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

这将返回一个IEnumerable><PropertyInfo>,然后您应该可以使用它。