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

EF 7中调用存储过程遇MapToStoredProcedures未识别问题求助

问题原因与解决办法

EF 7(即EF Core 7)中不存在MapToStoredProcedures()方法,这个API是Entity Framework 6专属的,EF Core系列(包括EF7)已经用全新的方式处理存储过程相关配置。结合你的场景(调用返回多表数据的存储过程并映射到模型),按以下方式调整即可:

1. 针对读取存储过程数据的场景(你的核心需求)

如果只是要读取存储过程返回的多表数据并映射到Inventory模型,不需要配置实体到存储过程的映射,直接调用即可:

  • 方式一:使用Database.SqlQuery<T>(无需将Inventory注册为DbSet)
    var command = "EXEC YourStoredProcedureName"; // 替换为你的存储过程调用语句,可带参数
    var result = await _context.Database.SqlQuery<Inventory>(command).ToListAsync();
    
  • 方式二:使用DbSet结合FromSqlRaw(需注册DbSet)
    先确保Inventory被配置为无键实体(因为它不是数据库中实际存在的表,EF Core默认要求实体有主键):
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Inventory>().HasNoKey();
    }
    
    然后调用存储过程:
    var result = await _context.Inventorys.FromSqlRaw("EXEC YourStoredProcedureName").ToListAsync();
    

2. 若需配置实体CRUD使用存储过程(非当前需求,仅作补充)

如果你的需求是让Inventory实体的新增/更新/删除操作对应调用存储过程,EF Core 7的配置方式如下:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Inventory>()
        .InsertUsingStoredProcedure(sp => sp
            .HasName("InsertInventory")
            .Parameter(p => p.location, "LocationParam")
            .Parameter(p => p.Warehouse, "WarehouseParam"))
        .UpdateUsingStoredProcedure(sp => sp
            .HasName("UpdateInventory")
            .Parameter(p => p.location, "LocationParam"))
        .DeleteUsingStoredProcedure(sp => sp
            .HasName("DeleteInventory")
            .Parameter(p => p.Item, "ItemParam"));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:25:28