3

次のコードがあります。

public class Person
{
    public string LastName { get; set; }
}

public class Employee : Person
{        
}

設定あり

Map(p => p.MapInheritedProperties());
Property(p => p.LastName).HasMaxLength(100).IsRequired();

そして、それをに変更したい

public class Person
{
        public virtual string LastName {get; set;}
}

public class Employee : Person
{
    public override string LastName
    {
       get { return base.LastName; }
       set 
       {
             //add validation here or throw exception
             base.LastName = value;
       }
    }
}

アプリケーションを実行すると、モデルが変更されたと表示されます。DB 移行を追加しましたが、エラーが発生しました:

プロパティ 'LastName' はタイプ 'Employee' で宣言されたプロパティではありません。

を使用して、プロパティがモデルから明示的に除外されていないことを確認します。

メソッドまたは NotMappedAttribute データ注釈を無視します。有効なプリミティブ プロパティであることを確認してください。

これを機能させるには、どのようなマッピングを追加する必要がありますか? マイグレーションで EF 4.3 を使用しています。

ヒントをありがとう。

4

2 に答える 2

1

これは EF の制限のようです。プロパティは、基本クラスまたはサブクラスのいずれかに存在できますが、両方に存在することはできません。Table per Hierarchy (TPH) マッピングで共通の列名を共有する方法を参照してください。

于 2012-07-03T07:32:43.353 に答える
1

次の回避策を実行できます。

public class Person
{
    protected virtual void ValidateLastName() { }

    public string LastName
    {
       get { return lastName; }
       set 
       {
             ValidateLastName();
             lastName = value;
       }
    }
}

public class Employee : Person
{
    protected override void ValidateLastName()
    {
        // your validation logic here
    }
}
于 2012-07-03T07:36:42.010 に答える