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

外部キーのプロパティを検索するには、この SO questionに関する @Ashraf の回答を使用してください。

Fluent API を維持しながら、DatabaseGenerated 属性を見つけるのに似たものは見つかりませんでした。POCO にデータ注釈を追加する場合は、他の属性と同様に、リフレクションを使用してそれを取得できるはずです (このブログ投稿で行われていることと同様)。

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

これは を返しIEnumerable><PropertyInfo>、それをいじることができるはずです。

于 2013-01-08T15:09:25.840 に答える