是否可以创建一个代码优先的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 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的情况下获得此功能的经验?
答案 0 :(得分:4)
是。要完成从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
周围工作。
答案 1 :(得分:1)
UFF。发现了问题。
因为我使用小写注册列映射,所以查询不起作用。列名和表名必须为大写。
多么愚蠢。