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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?