1

継承されたプロパティをマッピングしようとした人はいますか?次のエラーが発生するので、それがうまく機能し、どこかで間違いを犯していると聞いてうれしいからです。

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

私のモデルは次のようになります。

abstract class Entity { public int Id {get; set; }}
abstract class User : Entity { public string UserName {get; set;} }
sealed class Advertiser : User { }

私のAdvertisementConfigurationクラスは次のようになります。

class AdvertiserConfiguration : EntityTypeConfiguration<Advertiser>
{
   public AdvertiserConfiguration()
   {
      // the following line indirectly causes an InvalidOperationException:
      Property( x => x.UserName ).HasMaxLength(50);
   }
}

Userから継承しないように(そしてUserNameプロパティをプルダウンするように)Advertiserクラスを変更すると、すべてが正常に機能します。

4

1 に答える 1

9

抽象型のマッピングを定義できます(この場合は必須です)。

class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        Property( x => x.UserName ).HasMaxLength(50);
    }
}

そしてもちろん、それをモデルビルダー構成に追加します。

modelBuilder.Configurations.Add(new UserConfiguration());

Userはエンティティです-抽象的ですが、それでもすべてのマッピングオプションを備えたエンティティです。

于 2011-11-17T16:49:21.023 に答える