我正在使用 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/