문제

코드 첫 번째 승인 및 유창한 구성을 사용하여 EF 4.3.1에서 간단한 상속 시나리오를 설정하려고합니다.

일대일 탐색 속성과 상속 된 클래스 'AA'가있는 추상 기본 유형의 'a'를 만들었습니다.

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; }
}
.

Navigation 속성의 첫 번째 수준으로 데이터를 다시 가져 오려고하면 예상대로 작동합니다.

... dataContext.AASet.Include("ChildB") ...
.

그러나 다음과 같이 상속 된 유형의 탐색 속성을 포함하려고 시도 할 때 :

... dataContext.AASet.Include("ChildC") ...
.

다음 내부 예외 메시지가있는 런타임에 EntityCommandCompilationException을 얻습니다.

지정된 표현식의 ResultType은 다음과 호환되지 않습니다. 필수 유형. Expression ResuctType입니다 '일시적. 설명 [... a]'그러나 필요한 유형은 '일시적인 .Reference [... aa]'. 매개 변수 이름 : 인수 [0]

아무도 비슷한 문제가 발생 했습니까?

아마도 뭔가를 놓치고 있지만이 샘플에 무엇이 잘못되었는지 볼 수는 없습니다.

내 모델을 예상대로 작동시키기 위해 무엇을 할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top