SO (子エンティティのプロパティから基本エンティティをフィルター処理) に関する最初の質問から 1 年以上が経過した後、同様の問題が発生しました。
抽象基本型があります
public abstract class Base{
}
この基本タイプから継承するいくつかの子エンティティがあります
public class Child1 : Base{
public virtual NavigationProperty NavigationProperty {get; set; }
public int NavigationPropertyId {get; set}
}
public class Child2 : Base{
public virtual NavigationProperty NavigationProperty {get; set; }
}
子エンティティにはすべて、NavigationProperty プロパティがあります。そして、NavigationProperty クラスは次のようになります
public class NavigationProperty{
public virtual ICollection<Child1> Child1s {get; set;}
public virtual Child2 Child2s {get; set;}
}
Child2 と NavigationProperty の間には 1 対 1 のマッピングがあります。Child1 と NavigationProperty の間の一対多の関係。これらのマッピングを機能させるために、TPT を使用しています。私の最初の質問は、移動できますか
public NavigationProperty NavigationProperty {get; set; }
ベースクラスに?
私はこれを一日中試していますが、成功しませんでした。それが不可能な場合は、少なくとも基本型から NavigationProperty にアクセスできます。すべての子がこのプロパティを持った後、次のようなことを試しました
public abstract class Base{
public abstract NavigationProperty NavigationProperty {get; set; }
}
....
public abstract class Child2{
public override NavigationProperty NavigationProperty {get; set; }
}
しかし、エンティティ フレームワークでは次のエラーが発生します。
Sequence contains more than one matching element
次のようなものを使用できます
public abstract class Base{
public abstract NavigationProperty GetNavigationProperty();
}
public abstract class Child2{
public override NavigationProperty NavigationProperty {get; set; }
public override NavigationProperty GetNavigationProperty(){
return NavigationProperty;
}
}
しかし、私はこれらの余分なメソッドを導入したくありません。これをよりエレガントに達成する方法はありますか?
編集:
私はすでに[NotMapped]
属性を入れてみたことを忘れていました。EF[NotMapped]
属性も継承されていると思うので、子プロパティもマップされていません。
Linq-to-Entites が機能するとは思わない。ナビゲーション プロパティを使用してベース エンティティをクエリできるようにしたくありません。GetNavigationProperty および SetNavigationProperty メソッドを削除したいだけです。したがって、基本クラスから NavigationProperty にアクセスしようとすると、メモリにロードする必要があります。それだけです。しかし、1週間の努力の後、私はそれが可能だとは思わない.