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

如何更新Entity Framework存储过程结果的自动生成代码?

解决EF自动生成类不更新存储过程结果的问题

嘿,我来帮你梳理下这个问题!你已经做了不少正确的操作,但EF4(你用的是EF运行时4.0.30319)搭配VS2013确实有一些容易踩的小坑,咱们一步步来排查:

1. 先确认EDMX里的Function Import是否真的同步了修改

  • 打开EDMX设计视图,找到对应存储过程的Function Import,右键点击选择「属性」
  • 重点检查:
    • 返回类型是否和修改后的存储过程输出一致(比如新增/删除了字段、字段类型变了)
    • 如果返回的是复杂类型,找到对应的复杂类型,查看它的字段是否完全匹配存储过程的输出结果

    有时候更新模型向导不会自动更新复杂类型的结构,尤其是存储过程的输出字段有变化时,这时候旧的复杂类型会导致生成的类还是老样子

2. 清理项目缓存并重新生成

  • 先执行「Build -> Clean Solution」清理旧的编译文件,避免残留的旧类干扰
  • 再执行「Build -> Build Solution」重新生成整个项目
  • 之后再右键EDMX下的TT文件(非上下文文件)选择「运行自定义工具」,或者用「Build -> 转换所有T4模板」

3. 手动删除旧的导入项,重新添加

如果上面的步骤没用,大概率是EDMX里的缓存问题,可以试试彻底重置:

  • 在EDMX设计视图中,删除对应的Function Import
  • 找到对应的复杂类型(如果存在),也一并删除
  • 重新运行「从数据库更新模型」,在向导中选中修改后的存储过程,完成更新
  • 再次运行TT模板生成类文件

4. 确认EF版本与TT模板的兼容性

你用的是EF4,VS2013默认的TT模板虽然支持EF4,但要确认:

  • TT文件的「自定义工具」属性是TextTemplatingFileGenerator(右键TT文件 → 属性 → 自定义工具)
  • 不要手动修改TT模板生成的类文件,否则下次运行模板时可能不会覆盖修改(EF自动生成的类都是由TT模板控制的,手动改了会导致后续更新失效)

关于SQL Server版本提示的补充

你提到的「检测到不兼容的SQL Server版本」确实是VS2013自带的SSDT版本过旧导致的,安装VS2013的最新SSDT版本就能解决这个问题,虽然它和EF类更新不直接相关,但解决后能避免数据库连接时的其他异常,建议优先处理。

如果以上所有步骤都试过还是没效果,那可能需要针对存储过程的具体修改手动调整复杂类型,但这种情况很少见——大部分时候按照上面的步骤就能让EF自动更新对应的类啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:43:20