如何解决.NET Core MVC scaffolding时‘实体类型Users未定义键’错误(VB.NET)
VB.NET下解决EF Core Scaffolding主键未定义问题
针对你遇到的错误:
entity type Users has no key defined, define the key for this entitytype
结合你的Usuarios类代码,给出以下VB.NET专属解决步骤:
确保
<Key>特性生效
你已经在Id字段上添加了<Key>特性,但必须在类文件顶部引入正确的命名空间,否则特性不会被EF Core识别:Imports System.ComponentModel.DataAnnotations修正DbContext的DbSet命名匹配
错误提示指向的实体类型是Users,但你的类名为Usuarios,这说明你的DbContext中可能定义了DbSet(Of Usuarios) Users,EF会将DbSet的名称当作实体类型名,导致找不到主键配置。请将DbSet名称与类名保持一致:Public Class YourDbContext Inherits DbContext Public Property Usuarios As DbSet(Of Usuarios) ' 其他DbSet及配置代码 End Class若你需要将数据库表名设为
Users,可在Usuarios类上添加<Table("Users")>特性(需额外引入System.ComponentModel.DataAnnotations.Schema命名空间)。移除实体类中的UI专用属性
你的Usuarios类里的comunidades As SelectListItem是UI层的下拉选项类型,不属于EF实体模型范畴,EF会尝试映射这个无法识别的类型,进而干扰主键识别。请将该属性移到专门的ViewModel类中:' 仅保留数据库映射属性的实体类 Public Class Usuarios <Key> Public Property Id As Integer Public Property Nombre As String Public Property Clave As String Public Property FechaAlta As DateTime Public Property Comunidad As String Public Property Ciudad As String Public Property Rol As Integer End Class ' 用于页面交互的ViewModel Public Class UsuariosViewModel Public Property Usuario As Usuarios Public Property Comunidades As IEnumerable(Of SelectListItem) End ClassFluent API显式配置主键(备选方案)
若特性方式仍无效,可在DbContext的OnModelCreating方法中用Fluent API强制指定主键:Protected Overrides Sub OnModelCreating(modelBuilder As ModelBuilder) modelBuilder.Entity(Of Usuarios)().HasKey(Function(u) u.Id) ' 其他实体配置代码 End Sub
内容的提问来源于stack exchange,提问作者ffb
相关产品推荐
相关产品推荐

