EF Core : build one-to-one relationship between two base classes

440 Views Asked by At

I have two base classes where each base class has inherited subclasses:

[Table("BaseClassOne")]
public class BaseClassOne
{
    public Guid         Id      { get; set; }
    public BaseClassTwo BaseTwo { get; set; }
}

[Table("DerivedClassOne")]
public class DerivedClassOne : BaseClassOne
{
    public Guid   Id   { get; set; }
    public string Name { get; set; }
}

[Table("BaseClassTwo")]
public class BaseClassTwo
{
    public Guid         Id      { get; set; }
    public BaseClassOne BaseOne { get; set; }
}

[Table("DerivedClassTwo")]
public class DerivedClassTwo : BaseClassTwo
{
    public Guid Id { get; set; }
}

Now I would like to configure the relationships via model-builder, but without needing a discriminator:

builder
    .Entity<BaseClassOne>()
    .HasKey(b1 => b1.Id);

builder
    .Entity<DerivedClassOne>()
    .HasBaseType<BaseClassOne>();

builder
    .Entity<BaseClassTwo>()
    .HasKey(b2 => b2.Id);

builder
    .Entity<DerivedClassTwo>()
    .HasBaseType<BaseClassTwo>();

//This is where the problem starts:
builder
    .Entity<BaseClassTwo>()
    .HasOne(b2 => b2.BaseClassOne)
    .WithOne(b1 => b1.BaseClassTwo)
    .HasForeignKey<BaseClassTwo>(e => e.Id)
    .OnDelete(Rule.Cascade);

I'm trying to run a query like following I get an error that the column m.Discriminator can't be found:

_context.BaseClassesTwo
    .Select(b2 => new
    {
        val1 = b2.name,
        val2 = b2.BaseClassOne.name
    })
    .ToList();

Is this an conceptional problem or do I need to change the configuration? And when, how?

0

There are 0 best solutions below