コードファーストアプローチと流暢な構成を使用して、EF4.3.1で単純な継承シナリオをセットアップしようとしています。
1対1のナビゲーションプロパティを持つ抽象基本タイプ「A」を作成しました。また、1対1のナビゲーションプロパティを持つ継承されたクラス「AA」は次のとおりです。
public abstract class A
{
public Guid ID { get; set; }
public B ChildB { get; set; }
}
public class AA : A
{
public C ChildC { get; set; }
}
public class B
{
public Guid ID { get; set; }
public A Parent { get; set; }
}
public class C
{
public Guid ID { get; set; }
public AA Parent { get; set; }
}
public class AConfiguration : EntityTypeConfiguration<A>
{
public AConfiguration()
{
this.HasRequired(o => o.ChildB)
.WithRequiredPrincipal(o => o.Parent);
this.Map(o =>
{
o.ToTable("A");
});
}
}
public class AAConfiguration : EntityTypeConfiguration<AA>
{
public AAConfiguration()
{
this.HasRequired(o => o.ChildC)
.WithRequiredPrincipal(o => o.Parent);
this.Map(o =>
{
o.ToTable("AA");
});
}
}
public class BConfiguration : EntityTypeConfiguration<B>
{
public BConfiguration()
{
this.HasRequired(o => o.Parent)
.WithRequiredDependent(o => o.ChildB);
this.Map(o =>
{
o.ToTable("B");
});
}
}
public class CConfiguration : EntityTypeConfiguration<C>
{
public CConfiguration()
{
this.HasRequired(o => o.Parent)
.WithRequiredDependent(o => o.ChildC);
this.Map(o =>
{
o.ToTable("C");
});
}
}
public class DataContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add<A>(new AConfiguration());
modelBuilder.Configurations.Add<AA>(new AAConfiguration());
modelBuilder.Configurations.Add<B>(new BConfiguration());
modelBuilder.Configurations.Add<C>(new CConfiguration());
}
public DbSet<AA> AASet { get; set; }
public DbSet<B> BSet { get; set; }
public DbSet<C> CSet { get; set; }
}
最初のレベルのナビゲーションプロパティを使用してデータを取り戻そうとすると、期待どおりに機能します。
... dataContext.AASet.Include("ChildB") ...
しかし、次のように継承されたタイプのナビゲーションプロパティを含めようとすると:
... dataContext.AASet.Include("ChildC") ...
実行時にEntityCommandCompilationExceptionが発生し、次の内部例外メッセージが表示されます。
指定された式のResultTypeは、必要なタイプと互換性がありません。式ResultTypeは'Transient.reference[... A]'ですが、必要なタイプは' Transient.reference[...AA]'です。パラメータ名:arguments [0]
誰かが同様の問題に遭遇しましたか?
おそらく何かが足りないのですが、このサンプルの何が問題なのかわかりません。
モデルを期待どおりに機能させるにはどうすればよいですか?