在 MVC 6 中使用视图模型

Using view model in MVC 6

我正在尝试实现视图模型以从多个 table 获取数据。但是,我收到以下错误

InvalidOperationException: 实体类型 'RoleManagement.Models.RolePermissionsViewModel' 需要定义键。

下面是我的视图模型

 public class RolePermissionsViewModel
{

    public List<LMS_RolePermissions> RolePermissions { get; set; }
    public List<LMS_UserPermissions> UserPermissions { get; set; }
}

其中LMS_RolePermissions和LMS_UserPermissions是数据库中两个不同的table。基本上我想从视图模型中的这两个 table 获取数据。为了获取我在代码下方编写的数据

 RolePermissionsViewModel rolemodel = new RolePermissionsViewModel
 {
    RolePermissions = dbContext.RolePermissions.ToList(),
    UserPermissions = dbContext.UserPermissions.ToList()
 };

和 DBContext class

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
    }
    public DbSet<LMS_LocLanguage> LMS_LocLanguage { get; set; }
    public DbSet<LMS_Permissions> Permissions { get; set; }

    public DbSet<LMS_RolePermissions> RolePermissions { get; set; }

    public DbSet<LMS_UserPermissions> UserPermissions { get; set; }

    public DbSet<RolePermissionsViewModel> RoleUserPermission { get; set; }
}

我不想定义密钥,不应创建 table。

我该如何解决这个问题?

建议将域模型和视图模型分开放置。如果我使用 DbSet<myclass> 或在与 Dbset 一起使用的另一个 class 中提到它,则 applicationcontext 中的所有表都是按 entity framework 约定创建的。你的答案应该是 excluding types,带有数据注释 NotMapped 和流利的 api modelbuilder.ignore<RolePermissionsViewModel>();。 (当然,你会先删除DbSet。如果我没看错,你在命令数据库设置后对你的代码说"please dont create this,i beg on you"。)