You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决.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 Class
    
  • Fluent 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:32:11