sql-server - 如何使用 Oracle 和 SQL Server 在 .NET 4.5 C# Entity Framework 6 中将列映射到大写?

标签 sql-server oracle entity-framework c#-4.0 entity-framework-6

我正在使用 C#、.NET 4.5 和 Entity Framework 6 在我的项目中。它使用 Oracle 和 SQL Server,具体取决于客户端的安装。

该方法是数据库优先的,因为在我们决定从 NHibernate 更改 ORM 时,该数据库已经存在。到 Entity Framework 6。

映射如下所示:

ToTable(schema + ".Motorista");
Property(x => x.Criacao).HasColumnName("criacao").IsOptional();

映射中的表名和列名都采用 PascalCase,这在 SQL Server 中工作正常,但在 Oracle 中,所有名称都是大写,这会导致错误:

ORA-00942: table or view does not exist



如果我手动将其设为大写,那么它在 Oracle 上运行良好。但由于与 SQL Server 的兼容性,我不能这样做。

使用 Oracle 时,如何对 Entity Framework 说大写所有名称?

我可以在这种情况下使用约定吗?

最佳答案

当数据库名称(表和列)与类模型中的类和属性名称相同时,很容易引入 自定义代码优先约定 :

在上下文的 OnModelCreating重载您可以添加这些行来添加约定如何分别从类名和属性名派生表名和列名:

modelBuilder.Types().Configure
    (c => c.ToTable(c.ClrType.Name.ToUpper(), schema));

modelBuilder.Properties().Configure
    (c => c.HasColumnName(c.ClrPropertyInfo.Name.ToUpper()));

当然,您应该有条件地执行此操作,即在连接到 Oracle 时。例如通过检查像 OnOracle 这样的全局常量你可以通过
ConfigurationManager.ConnectionStrings[0].ProviderName
    == "System.Data.OracleClient"

在应用程序启动时。

关于sql-server - 如何使用 Oracle 和 SQL Server 在 .NET 4.5 C# Entity Framework 6 中将列映射到大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418522/

相关文章:

sql - 星号在oracle sql中的使用

sql - 如何比较sql中的字符串忽略大小写?

visual-studio-2010 - 在 Visual Studio 中查看为 Entity Framework Save Changes 命令生成的 SQL?

mysql - 双循环选择和数据读取器中的 Entity Framework 6 和 MySql 错误

c# - Entity Framework 'include' 包含超出应有的内容

sql-server - 登录 Microsoft SQL Server 错误 : 18456

sql - 如何在sql server数据库中查找常量的用法

sql - TSQL - 递归 CTE 效率低下 - 需要替代方案

c# - SQL Server 数据库连接问题

oracle - 查询查找表关系类型