Ste*_*rew 4 oracle entity-framework odp.net entity-framework-6
是否可以创建一个使用 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);
Run Code Online (Sandbox Code Playgroud)
我将直接传递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.
Run Code Online (Sandbox Code Playgroud)
有没有人有过在不污染 app.config 的情况下让它工作的经验?
是的。为了完成从 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());
}
}
Run Code Online (Sandbox Code Playgroud)
我还在DbConfiguration.SetConfiguration(EntityFrameworkConfiguration.Instance);应用程序的启动中进行了调用,因为我在多个程序集中都有 DbContext,所有这些程序集都需要共享此配置。
顺便说一句,我还发现这可以有效地让您的应用程序解决ConfigurationErrorsException: The 'DbProviderFactories' section can only appear once per config file您可能无法修复用户的 machine.config 的情况。
| 归档时间: |
|
| 查看次数: |
1937 次 |
| 最近记录: |