それ自体のコレクションと、ルートウィジェットの場合はnullにしたい親プロパティを持つ次のエンティティがあります。
public class CanvasWidgetQuery
{
public int CanvasWidgetId { get; set; }
public int? ParentCanvasWidgetId { get; set; }
public virtual CanvasWidgetQuery ParentCanvasWidget { get; set; }
public virtual ICollection<CanvasWidgetQuery> InnerCanvasWidgets { get; set; }
}
は実際には単なる基本クラスであるためCanvasWidgetQuery
です(抽象的である可能性もありますが、抽象化なしで動作することがわかるまで抽象化はしません)。の派生型をマップするための汎用マッピング構成を作成したかったCanvasWidgetQuery
:
public class CanvasWidgetQueryMap<TCanvasWidgetQuery> : EntityTypeConfiguration<TCanvasWidgetQuery>
where TCanvasWidgetQuery : CanvasWidgetQuery
{
public CanvasWidgetQueryMap()
{
this.HasKey(q => q.CanvasWidgetId);
this.HasMany(w => w.InnerCanvasWidgets)
.WithOptional(w => w.ParentCanvasWidget)
.HasForeignKey(w => w.ParentCanvasWidgetId);
}
}
派生型に関係なく、それらはすべてこれらのプロパティを持っていますが、残念ながら呼び出しについて不平を言っていWithOptional
ます (一度に 2 つのエラー):
Error 1 Cannot implicitly convert type 'CanvasWidgetQuery' to 'TCanvasWidgetQuery'. An explicit conversion exists (are you missing a cast?)
Error 2 Cannot convert lambda expression to delegate type 'System.Func<CanvasWidgetQuery,TCanvasWidgetQuery>' because some of the return types in the block are not implicitly convertible to the delegate return type
これを実際の派生型のマッピングのレベルに移動すると、次のようになります。
public class SearchCanvasWidgetQueryMap : CanvasWidgetQueryMap<SearchCanvasWidgetQuery>
{
public SearchCanvasWidgetQueryMap()
{
this.HasMany(w => w.InnerCanvasWidgets)
.WithOptional(w => w.ParentCanvasWidget)
.HasForeignKey(w => w.ParentCanvasWidgetId);
}
}
CanvasWidgetQuery
今、暗黙的に変換できないと不平を言っていますSearchCanvasWidgetQuery
:
public class SearchCanvasWidgetQuery : CanvasWidgetQuery
{
}
どうすれば自分が求めていることを達成できますか