Entity framework core 如何将实体子体映射到视图?

Entity framework core 如何将实体子体映射到视图?,entity-framework-core,Entity Framework Core,我有一个实体模型类DirectoryUser。以及相应的SQL Server表。 我创建了一个视图,它向映射了DirectoryUser的表中添加了一个名为Roles的varchar列。(该列使用字符串_AGG连接用户所属的角色名称) 现在我想将此视图映射为(无键?DbSet映射到模型类型DirectoryUserWithRoles。听起来很合理,我没有将所有属性从DirectoryUser复制并粘贴到DirectoryUserWithRoles,而是这样做的: public class Dir

我有一个实体模型类
DirectoryUser
。以及相应的SQL Server表。 我创建了一个视图,它向映射了
DirectoryUser
的表中添加了一个名为Roles的varchar列。(该列使用字符串_AGG连接用户所属的角色名称)

现在我想将此视图映射为(无键?
DbSet
映射到模型类型
DirectoryUserWithRoles
。听起来很合理,我没有将所有属性从
DirectoryUser
复制并粘贴到
DirectoryUserWithRoles
,而是这样做的:

public class DirectoryUserWithRoles : DirectoryUser
{
    public string Roles { get; set; }
}
并将这一行添加到我的上下文中

public DbSet<DirectoryUserWithRoles> DirectoryUsersWithRoles { get; set; } 
我知道我混淆了EF,因为
DirectoryUserWithRoles
是一个
DirectoryUser
,复杂的继承O/R映射逻辑基于“是”关系解释模型

因此,当尝试PM>在PM中添加迁移时,会出现异常,显示:

无法将实体类型“DirectoryUserWithRoles”映射到表,因为它是从“DirectoryUser”派生的。只能将基本实体类型映射到表

添加(取消注释)
eb.HasNoKey()没有帮助:

无法将“DirectoryUserWithRoles”配置为无键,因为它是派生类型。根类型“DirectoryUser”必须配置为无键

问题


如果我想将实体模型类和数据库集映射到我的视图,那么我唯一的机会就是将
DirectoryUser
类复制(复制和粘贴)为
DirectoryUserWithRoles

创建一个抽象类
DirectoryUserBase
,这两个类都继承,而EF不知道基类。@GertArnold,但不幸的是,
DirectoryUser
必须继承内置的
IdentityUser
:-(因此,
DirectoryUserBase
也可以。
DirectoryUser
仍将“成为”
IdentityUser
)。
modelBuilder.Entity<DirectoryUserWithRoles>(eb =>
{
    //eb.HasNoKey();
    eb.ToView("UsersWithRoles");
});