EF Core Hierarchy TPH 将两个实体映射为一个

问题描述

我有一个基础项目,其中包含一些基本实体。让我们使用 BaseUser 作为一个。在子项目中,它引用基础项目,User 类继承自该 BaseUser。唯一的区别是 User 类有 List<Blogs>,所以没有额外的属性,映射也没有变化。

当我查询 Users 时,它没有找到任何内容,因为它们被创建为 BaseUser 并且查询的鉴别符值为“User”。我不想查询“BaseUser”,因为我想要 List<Blogs> 的关系属性

有什么方法可以告诉 EF 基本上将这些类视为一个类吗?有没有更好的方法来处理分裂? (显然base project没有blog的概念,所以不能把List移到base中)

应要求提供一些示例类

/* Base Project (nuget package created) */
public class BaseUser {
    public int UserId { get; set; }
    public int Name { get; set; }
}

public class BaseContext : DbContext {
    public DbSet<BaseUser> BaseUsers {get;set;}
}

public class BaseDataInstaller {
    BaseContext _ctx;
    public BaseDataInstaller( BaseContext ctx ){
        _ctx = ctx;
    }
    public void Install(){
        _ctx.BaseUsers.Add( new BaseUser { Name="Demo User 1" } );
        _ctx.BaseUsers.Add( new BaseUser { Name="Demo User 2" } );
        _ctx.SaveChanges();
    }
}
/* Child Project (consumes nuget package)*/
public class User : BaseUser {
    List<Blogs> Blogs { get; set; }
}

public class ProjectContext : BaseContext {
    public DbSet<User> Users { get; set; }
}

public class SomeService {
    ProjectContext _ctx;
    public BaseDataInstaller(ProjectContext ctx){
        _ctx = ctx;
    }

    //Finds 0 users
    public void PrintUsers(){
        var users = _ctx.Users.ToList();
        users.ForEach( u=> Console.WriteLine(u.Name) );
    }

    //Finds Users
    public void PrintBaseUsers(){
        var users = _ctx.BaseUsers.ToList();
        users.ForEach( u=> Console.WriteLine(u.Name) );
    }
}

对比生成sql添加了判别器

where discriminator = 'BaseUser'where discriminator = 'User'

两者之间没有不同的属性,只是与博客的关系。

那么有没有办法让两者具有相同的鉴别器值或

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...