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

Entity Framework Core 6:自定义存储过程结果模型的正确实现方式

问题解答

是的,使用.HasNoKey().ToView(null)是EF Core中处理这类仅用于接收存储过程/自定义查询返回结果、不对应数据库表的模型的公认正确方式。

原因说明

EF Core的迁移系统默认会认为每个注册的DbSet<T>都需要对应数据库中的一个表或视图。虽然.HasNoKey()已经将模型标记为无键实体,但EF Core仍会尝试为其生成表结构脚本,直到你通过.ToView(null)明确告知:该实体不映射到任何数据库对象(表或视图),迁移系统便会跳过相关的表创建逻辑。

替代方案

如果你不需要通过DbSet来访问这个模型,也可以直接在DbContext中定义返回查询结果的方法,无需注册DbSet,自然也不会触发迁移脚本生成:

public IQueryable<ustp_MyProcResults> GetMyProcResults()
{
    return FromSqlRaw("EXEC ustp_MyProc").AsNoTracking();
}

但如果需要利用DbSet的LINQ组合、依赖注入等特性,DbSet<T>加.ToView(null)的配置方式依然是更合适的选择。

注意事项

这类无映射模型仅支持查询操作(比如接收存储过程结果),无法用于增、删、改操作,因为没有对应的数据库对象可以执行这些变更。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:46:01