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

EF6迁移至Microsoft.Data.SqlClient时SqlParameter转换异常求助

EF6迁移至Microsoft.Data.SqlClient时SqlParameter类型不匹配异常的解决思路

异常原因

这个InvalidCastException本质是EF6的DbContext仍绑定旧的System.Data.SqlClient组件,导致无法识别Microsoft.Data.SqlClient.SqlParameter——两个类同名但分属不同程序集,类型不兼容。

解决步骤

  • 替换默认连接工厂
    原web.config中使用的SqlConnectionFactory基于System.Data.SqlClient,需替换为适配Microsoft.Data.SqlClient的实现:

    <!-- 原配置 -->
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    
    <!-- 修改后配置 -->
    <defaultConnectionFactory type="Microsoft.EntityFramework.SqlServer.MicrosoftSqlConnectionFactory, Microsoft.EntityFramework.SqlServer" />
    
  • 修正连接字符串的ProviderName
    确保连接字符串的providerName指定为Microsoft.Data.SqlClient,而非旧的System.Data.SqlClient:

    <connectionStrings>
        <add name="MyContext" 
             connectionString="Data Source=...;Initial Catalog=...;Integrated Security=True;" 
             providerName="Microsoft.Data.SqlClient" />
    </connectionStrings>
    
  • 确认DbConfiguration全局生效
    虽然已添加[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))]特性,需确保:

    1. MicrosoftSqlDbConfiguration来自Microsoft.EntityFramework.SqlServer命名空间
    2. 项目中没有其他全局DbConfiguration初始化代码覆盖该设置(比如DbConfiguration.SetConfiguration()的调用)
  • 检查程序集版本兼容性
    确保以下包版本匹配:

    • EF6版本为6.5.1
    • Microsoft.EntityFramework.SqlServer版本与EF6一致(建议6.5.1)
    • Microsoft.Data.SqlClient版本需与Microsoft.EntityFramework.SqlServer兼容(推荐4.x或5.x系列)
  • 临时兼容方案(可选)
    若配置修改后仍未生效,可临时使用EF原生的ObjectParameter规避类型问题:

    Context.Database
        .SqlQuery<int>(sql, 
            new System.Data.Entity.Core.Objects.ObjectParameter("@userName", userName)).First();
    

核心逻辑

让EF6的所有核心组件(连接工厂、数据提供者、配置类)完全切换到Microsoft.Data.SqlClient的实现,确保参数类型、连接对象等全链路兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:06:11