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

在Blazor .Net Framework中使用DLL导入的ADO.NET Entity Model报连接串错误如何解决

问题根因

你踩了两个核心误区:

  1. 旧版ADO.NET Entity Model对应的是EF6及更早版本,这类版本的实体上下文默认只会读取 ASP.NET Framework项目的web.config配置文件 里的<connectionStrings>节点,不会自动识别appsettings.json里的配置。
  2. 你手动注入上下文时,要么是没正确加载appsettings.json导致读出来的连接串为空,要么是传的是普通SQL连接串、不是EF要求的带元数据的完整连接串,最终上下文还是会 fallback 去读配置文件,就触发了找不到配置的报错。

解决方法

方案一(推荐,最适配旧EF逻辑)

直接用EF6默认的配置规则,不需要改注入逻辑:

  • 打开Blazor项目根目录的web.config文件,在<configuration>节点下添加如下配置:
<configuration>
  <!-- 其他已有配置 -->
  <connectionStrings>
    <add 
      name="MyDBEntities" 
      connectionString="metadata=res://*/你的模型文件名.csdl|res://*/你的模型文件名.ssdl|res://*/你的模型文件名.msl;provider=System.Data.SqlClient;provider connection string=&quot;你的实际SQL连接字符串&quot;" 
      providerName="System.Data.EntityClient" 
    />
  </connectionStrings>
</configuration>

注意connectionString里的metadata部分要和你原来存实体模型的类库项目里的配置完全一致,只需要把provider connection string里的内容替换成你实际的数据库连接信息即可。

  • 删掉你之前写的手动传连接串的注入代码,直接简化为:
services.AddScoped<MyDBEntities>();

上下文默认构造函数会自动读取web.config里的对应配置。

方案二(一定要用appsettings.json的情况)

  1. 先确保appsettings.json里存的是EF要求的完整实体连接串(就是上面带metadata的整串,不是普通SQL连接串)。
  2. ASP.NET Framework默认不会加载appsettings.json,你需要在Startup的构造函数里手动添加配置加载逻辑:
public class Startup
{
    public IConfiguration Configuration { get; }
    public Startup()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(HttpRuntime.AppDomainAppPath)
            .AddJsonFile("appsettings.json");
        Configuration = builder.Build();
    }
    // 其他代码
}
  1. 如果自动生成的MyDBEntities没有公开的接受字符串参数的构造函数,添加一个partial类扩展:
public partial class MyDBEntities
{
    public MyDBEntities(string connectionString) : base(connectionString)
    {
    }
}
  1. 你之前写的注入代码就可以正常生效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:42:03