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

如何修复Blazor Server中TipoDeDespesa实体需定义主键的错误?

解决EF Core提示'TipoDeDespesa'无主键的问题

你遇到的错误是因为EF Core无法识别TipoDeDespesa实体的主键配置,虽然你在OnModelCreating里已经用Fluent API设置了主键,但可能有以下几个原因导致配置不生效,对应解决方法如下:

1. 检查实体类TipoDeDespesa的定义

首先确认你的TipoDeDespesa实体类里存在IdTipoDespesa属性,且满足以下要求:

  • 是public访问修饰符
  • 类型为Guid(因为你在配置里用了HasDefaultValueSql("(newid())"),对应SQL的uniqueidentifier类型)
  • 属性名称拼写和Fluent API里的e => e.IdTipoDespesa完全一致

正确的实体类示例:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace EndToEndDB.Data.EndToEnd
{
    public class TipoDeDespesa
    {
        // 可以加上[Key]特性显式标记主键
        [Key]
        public Guid IdTipoDespesa { get; set; }
        public string Tipo { get; set; }
        // 和Despesa的关联属性
        public ICollection<Despesa> Despesa { get; set; }
    }
}

2. 排查OnModelCreatingPartial方法的干扰

你的EndtoEndContext是partial类,可能存在其他文件里的OnModelCreatingPartial实现,不小心覆盖了主键配置。比如如果有这样的代码:

partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
{
    // 错误的配置,会覆盖之前的HasKey
    modelBuilder.Entity<TipoDeDespesa>().HasNoKey();
}

要删除这类代码,确保主键配置不被覆盖。

3. 清理并重新生成项目

有时候项目缓存会导致EF Core读取到旧的实体元数据,按以下步骤操作:

  • 右键项目 → 选择清理
  • 右键解决方案 → 选择重新生成

4. 确认EF Core版本兼容性

检查EF Core Power Tools生成代码时使用的版本,和你项目中引用的EF Core NuGet包版本是否一致。版本不匹配可能导致配置逻辑不生效,比如Power Tools用EF Core 6生成的代码,项目里却用EF Core 7,这种情况可以把NuGet包版本调整一致。

如果以上步骤都试过还是不行,可以提供TipoDeDespesa实体类的代码,进一步排查问题。

内容的提问来源于stack exchange,提问作者yNdGOD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:33:22