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

如何使用DevArt EDML文件建立Oracle连接并解决相关运行报错

解决方案步骤

1. 修正项目配置文件

首先确保你的控制台项目的App.config包含以下正确配置,指定EF使用Devart Oracle提供程序,避免默认使用SqlClient导致关键字不识别:

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <providers>
      <provider invariantName="Devart.Data.Oracle" type="Devart.Data.Oracle.Entity.OracleEntityProviderServices, Devart.Data.Oracle.Entity.EF6" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="Devart.Data.Oracle" />
      <add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle" />
    </DbProviderFactories>
  </system.data>
</configuration>

如果要直接在配置里写连接字符串,额外添加以下节点即可直接调用无参构造函数new KiddataAdminEntities()使用:

<connectionStrings>
  <add name="KiddataAdminEntitiesConnectionString" 
       connectionString="User Id=xxxx;Password=xxxx;Server=xx;Direct=True;Sid=xxxx;Persist Security Info=True" 
       providerName="Devart.Data.Oracle" />
</connectionStrings>

2. 手动传入现有Oracle连接的修正方案

你之前触发UnintentionalCodeFirstException的原因是重载的构造函数没有触发EDML预设的Database First模型加载逻辑,EF误以为你要使用Code First模式创建模型,命中了生成代码里的防护抛出异常,按以下步骤修正即可:

  1. 首先在程序入口处注册Devart的EF配置:
DbConfiguration.SetConfiguration(new Devart.Data.Oracle.Entity.OracleEntityProviderServicesConfiguration());
  1. 不要修改EDML自动生成的上下文文件,在同项目下新建同名partial类扩展构造函数:
public partial class KiddataAdminEntities : DbContext
{
    public KiddataAdminEntities(DbConnection existingConnection, bool contextOwnsConnection)
        : base(existingConnection, contextOwnsConnection)
    {
        // 调用自动生成的配置方法
        Configure();
        // 强制关闭Code First模型初始化,避免触发OnModelCreating
        Database.SetInitializer<KiddataAdminEntities>(null);
    }
}
  1. 调用时传入你已经测试可用的OracleConnection实例即可:
OracleConnection oc = new OracleConnection("你的连接字符串");
oc.Open();
using(var context = new KiddataAdminEntities(oc, contextOwnsConnection: true))
{
    var listOfAnrede = context.Anrede.ToList();
}

3. 额外验证项

  • 确保安装的Devart Oracle组件版本和EF6版本匹配,必须使用对应EF6的Devart驱动包
  • 确保EDML生成的模型程序集和控制台项目引用的Devart组件版本完全一致,避免版本冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:24:03