0

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

4

1 回答 1

2

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

在保留 Fluent API 的同时,我找不到任何类似的东西来查找 DatabaseGenerated 属性。如果您愿意在 POCO 上添加数据注释,您应该能够使用反射来获取它,就像任何其他属性一样(类似于此博客文章中所做的):

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

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

于 2013-01-08T15:09:25.840 回答