2

インターフェイスを実装するいくつかのエンティティでモデル構成の一部を再利用しようとしています。

このコードを確認してください:

public static void ConfigureAsAuditable<T>(this EntityTypeConfiguration<T> thisRef)
            where T : class, IAuditable
        {
            thisRef.Property(x => x.CreatedOn)
                .HasColumnName("utctimestamp")
                .IsRequired();

            thisRef.Property(x => x.LastUpdate)
                .HasColumnName("utclastchanged")
                .IsRequired();
        } // ConfigureAsAuditable

ご覧のとおり、onmodelcreatingメソッドで拡張メソッド「ConfigureAsAuditable」を次のように呼び出そうとしています。

EntityTypeConfiguration<Account> conf = null;

    conf = modelBuilder.Entity<Account>();
    conf.ToTable("dbo.taccount");

    conf.ConfigureAsAuditable();

デバッグすると、次の例外が発生します。

プロパティ'CreatedOn'は、タイプ'Account'で宣言されたプロパティではありません。IgnoreメソッドまたはNotMappedAttributeデータアノテーションを使用して、プロパティがモデルから明示的に除外されていないことを確認します。それが有効なプリミティブプロパティであることを確認してください。

よろしくお願いします:)PD:EF 5-rc、VS 2011、.NETFramework4.5を使用しています

4

1 に答える 1

2

より良いアプローチは、EntityTypeConfigurationの独自の派生バージョンを実装することだと思います。例えば:

    public class MyAuditableConfigurationEntityType<T> : EntityTypeConfiguration<T> 
where T : class, IAuditable{
public bool IsAuditable{get;set;}
}

次に、モデルを作成するときに、次の新しいタイプを使用します。

var accountConfiguration = new MyAuditableConfigurationEntityType<Account>();
accountConfiguration.IsAuditable = true; // or whatever you need to set
accountConfiguration.(HasKey/Ignore/ToTable/Whatever)
modelBuilder.Configurations.Add(accountConfiguration);
于 2012-09-30T14:44:56.597 に答える