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

无法将MassTransit连接到PostgreSQL:InboxState关系不存在

解决Npgsql.PostgresException: 42P01: relation "InboxState" does not exist错误
  • 确认DbContext已正确映射InboxState实体
    检查你的DbContext的OnModelCreating方法,是否添加了InboxState的实体配置。可以直接调用扩展方法:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.AddInboxStateEntity();
    }
    

    或者手动配置实体属性与索引,确保和MassTransit要求的结构一致。

  • 执行数据库迁移或手动创建表
    如果你使用EF Core管理数据库,运行以下命令生成并应用迁移,创建InboxState表:

    dotnet ef migrations add AddInboxStateTable
    dotnet ef database update
    

    也可以直接在PostgreSQL中执行SQL语句手动创建表:

    CREATE TABLE public."InboxState" (
        "Id" varchar(64) NOT NULL,
        "MessageId" varchar(64) NOT NULL,
        "ConsumerId" varchar(64) NOT NULL,
        "Endpoint" varchar(256),
        "Received" timestamptz NOT NULL,
        "ReceiveCount" int NOT NULL,
        "ExpirationTime" timestamptz,
        "Consumed" timestamptz,
        "LastSequenceNumber" bigint,
        CONSTRAINT "PK_InboxState" PRIMARY KEY ("Id"),
        CONSTRAINT "UX_InboxState_MessageId_ConsumerId" UNIQUE ("MessageId", "ConsumerId")
    );
    
  • 验证数据库连接的正确性
    检查应用配置中的数据库连接字符串,确保指向的是已经初始化了InboxState表的数据库,避免连接到未执行迁移的实例。

  • 确认MassTransit接收端点启用了Inbox
    在配置MassTransit接收端点时,必须明确启用Inbox并关联你的DbContext:

    cfg.ReceiveEndpoint("your-queue-name", e =>
    {
        e.UseInbox(context =>
        {
            context.ConfigureDbContext<YourDbContext>(options =>
            {
                options.UseNpgsql(Configuration.GetConnectionString("YourDb"));
            });
        });
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:50:03