如何在没有配置文件的情况下使用 Oracle Entity Framework

Posted

技术标签:

【中文标题】如何在没有配置文件的情况下使用 Oracle Entity Framework【英文标题】:How to use Oracle Entity Framework with no config file 【发布时间】:2015-12-02 10:38:31 【问题描述】:

是否可以创建一个代码优先的实体框架模型,该模型使用 ODP.Net 连接到现有数据库,而无需在 app.config 文件中进行任何设置?

我尝试了很多不同的东西。

目前我正在设置 DbConfiguration:

    sealed class EntityFrameworkConfiguration : DbConfiguration
    
        public static readonly DbConfiguration Instance = new EntityFrameworkConfiguration();

        EntityFrameworkConfiguration()
        
            this.SetDefaultConnectionFactory(new OracleConnectionFactory());
            this.SetProviderServices("Oracle.ManagedDataAccess.Client", EFOracleProviderServices.Instance);
        
    

    DbConfiguration.SetConfiguration(EntityFrameworkConfiguration.Instance);

我将 OracleConnection 直接传递到 EF 上下文中。

但是,我以 SQL Server 格式生成的 SQL 出现问题(在表别名周围使用双引号),或者我收到以下错误:

An unhandled exception of type 'System.NotSupportedException' occurred in EntityFramework.dll

Additional information: Unable to determine the provider name for provider factory of type 'Oracle.ManagedDataAccess.Client.OracleClientFactory'. Make sure that the ADO.NET provider is installed or registered in the application config.

有没有人在不使用 crud 污染 app.config 的情况下让它工作的经验?

【问题讨论】:

【参考方案1】:

是的。为了完成从 machine.config/app.config 到基于代码的配置的切换,我还必须包括对 SetProviderFactory() 的调用。

public sealed class EntityFrameworkConfiguration : DbConfiguration

    public static readonly DbConfiguration Instance = new EntityFrameworkConfiguration();

    public EntityFrameworkConfiguration()
    
        SetDefaultConnectionFactory(new OracleConnectionFactory());
        SetProviderServices("Oracle.ManagedDataAccess.Client", EFOracleProviderServices.Instance);
        SetProviderFactory("Oracle.ManagedDataAccess.Client", new OracleClientFactory());
    

我还在应用程序启动时调用了DbConfiguration.SetConfiguration(EntityFrameworkConfiguration.Instance);,因为我在多个程序集中都有 DbContext,它们都需要共享此配置。

顺便说一句,我还发现这对于允许您的应用程序在ConfigurationErrorsException: The 'DbProviderFactories' section can only appear once per config file 周围运行非常有效,因为您可能无权修复用户的 machine.config。

【讨论】:

【参考方案2】:

呃。发现问题了。

因为我使用小写注册列映射,所以查询不起作用。列名和表名必须大写。

多么愚蠢。

【讨论】:

以上是关于如何在没有配置文件的情况下使用 Oracle Entity Framework的主要内容,如果未能解决你的问题,请参考以下文章

pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下

如何在没有负载均衡器的情况下使用配置文件在 Amazon Elastic Beanstalk 实例中配置 SSL?

如何在没有使用“ROW FORMAT DELIMITER”创建配置单元表的情况下将“|”分隔文件加载到配置单元中

oracle如何在没有UNION的情况下将列转置为行

ios:如何在没有连接设备的情况下将新的 UDID 添加到配置文件?

在本地没有安装Oracle的情况下,使用plsql远程连接数据库