如何在没有配置文件的情况下使用 Oracle Entity Framework
How to use Oracle Entity Framework with no config file
是否可以创建代码优先 Entity Framework 模型,使用 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 服务器格式生成的 SQL 的问题(在 table 别名周围使用双引号),或者出现以下错误:
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.
有没有人有过在不污染 app.config 的情况下使它工作的经验?
呵呵。找到问题了。
因为我使用小写字母注册列映射,所以查询不起作用。列和 table 名称必须大写。
真傻。
是的。要完成从 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,它们都需要共享此配置。
附带说明一下,我还发现这可以有效地让您的应用程序在您可能无权修复用户的 machine.config 的情况下绕过 ConfigurationErrorsException: The 'DbProviderFactories' section can only appear once per config file
。
是否可以创建代码优先 Entity Framework 模型,使用 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 服务器格式生成的 SQL 的问题(在 table 别名周围使用双引号),或者出现以下错误:
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.
有没有人有过在不污染 app.config 的情况下使它工作的经验?
呵呵。找到问题了。
因为我使用小写字母注册列映射,所以查询不起作用。列和 table 名称必须大写。
真傻。
是的。要完成从 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,它们都需要共享此配置。
附带说明一下,我还发现这可以有效地让您的应用程序在您可能无权修复用户的 machine.config 的情况下绕过 ConfigurationErrorsException: The 'DbProviderFactories' section can only appear once per config file
。