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

ASP.NET Blazor项目能否混用CodeFirst与DatabaseFirst两种DBContext?

可以同时使用EF7 Code-First和EF6 Database-First的DbContext吗?

当然可以同时使用,你碰到的UnintentionalCodeFirstException是EF6 DbContext的配置问题,和两个版本的EF共存本身无关。

问题根源

EF6的Database-First模式依赖EDMX元数据文件(csdl、ssdl、msl),当你给DBFirstEntities添加带连接字符串的构造函数时,如果传入的只是单纯的数据库连接串(不带元数据部分),EF6会误以为你要切换到Code-First模式,从而抛出该异常。

解决步骤

  1. 修正EF6 DbContext的构造函数
    确保构造函数使用包含元数据的完整连接字符串,或者直接引用配置文件中定义的连接字符串名称:

    public class DBFirstEntities : DbContext
    {
        // 推荐:直接使用配置文件中定义的连接字符串名称
        public DBFirstEntities() : base("name=EF6DBFirstContext")
        {
        }
    
        // 如果需要手动传入完整连接字符串,必须包含metadata部分
        public DBFirstEntities(string fullConnectionString) : base(fullConnectionString)
        {
        }
    }
    
  2. 配置完整的EF6连接字符串
    在Blazor项目的appsettings.json中,为EF6添加包含元数据的完整连接字符串:

    "ConnectionStrings": {
      "EF7CodeFirstContext": "Server=你的服务器;Database=CodeFirstDB;Trusted_Connection=True;TrustServerCertificate=True",
      "EF6DBFirstContext": "metadata=res://*/你的模型命名空间.csdl|res://*/你的模型命名空间.ssdl|res://*/你的模型命名空间.msl;provider=System.Data.SqlClient;provider connection string=\"Server=你的服务器;Database=DBFirstDB;Trusted_Connection=True;TrustServerCertificate=True\""
    }
    

    注意替换你的服务器和你的模型命名空间为实际值。

  3. 正确注册两个DbContext
    在Program.cs中分别注册EF Core和EF6的DbContext,注意两者的注册方式不同:

    // EF7(EF Core)Code-First Context注册
    builder.Services.AddDbContext<EF7CodeFirstContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("EF7CodeFirstContext")));
    
    // EF6 Database-First Context注册
    builder.Services.AddScoped<DBFirstEntities>(sp =>
        new DBFirstEntities(builder.Configuration.GetConnectionString("EF6DBFirstContext")));
    
  4. 确保EDMX元数据文件可访问
    在类库项目中,找到EDMX文件,右键属性设置“复制到输出目录”为如果较新则复制,确保Blazor项目运行时能读取到元数据文件。

额外注意

EF Core(EF7)和EF6是完全独立的框架,它们的DbContext、配置逻辑不会互相干扰,只要各自配置正确,就能在同一个项目里正常工作。注意不要混用两个框架的API,比如不要用EF Core的UseSqlServer来配置EF6的DbContext。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:40:16