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");
});