在 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"。)
我正在尝试实现视图模型以从多个 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"。)