【问题标题】:How to set table names and columns as case sensitive in oracle 11g?如何在 oracle 11g 中将表名和列设置为区分大小写?
【发布时间】:2012-06-04 04:41:16
【问题描述】:

我有一个 .NET 4.0 应用程序,它使用连接到 MS SQL 2008 数据库的 Entity Framework 4。使用的命名约定是例如表“Clients”,字段:“Id”,“Id_Order”。现在我需要从SQL Server切换到Oracle Server,所以我将MS SQL数据库迁移到oracle数据库,但是问题是所有的表名和列名都是大写的,所以通过为oracle生成edmx(使用ODAC),我将不得不将代码从“Clients”更改为“CLIENTS”,将“Id”更改为“ID”,将“Id_Client”更改为“ID_CLIENT”,而且要更改的地方很多。 迁移是使用 Oracle SQL Developer 3.1.07 中的内置迁移工具完成的。

来自生成脚本的 sn-p: 创建表客户端(

我已经读过,为了创建区分大小写的标识符,您必须使用双引号。 所以我认为脚本应该是这样的: 创建表“客户”(

有没有人知道一个迁移工具可以保留名称大小写或至少一个我可以在脚本中打开的通用选项?

【问题讨论】:

    标签: entity-framework oracle11g case-sensitive database-migration


    【解决方案1】:

    为什么需要更改代码? Oracle 不区分大小写的全部意义在于,您可以将表称为clientsClientsCLIENTS,甚至clIeNtS,它会起作用。

    如果您出于某种原因需要区分大小写,则仅使用双引号,但除非您的表名除大小写外都相同(shudder),否则您不需要它.

    【讨论】:

    • 在我的 .NET 4.0 应用程序中,我有很多 linq 代码,例如: using(ExampleDbContext context = new ExampleDbContext()) { context.Clients.FirstOrDefault();因此,如果我使用 oracle 数据库创建 edmx,我将不得不编写 using(ExampleDbContext context = new ExampleDbContext()) { context.CLIENTS.FirstOrDefault();我的大部分查询都是在 linq 中完成的,其中 C# 区分大小写,而不是在存储过程中。
    • 在 Oracle SQL 中,您可以使用您希望使用的任何大小写组合来引用该表。包括Clients。那么为什么需要将 LINQ 代码改为 CLIENTS 呢?
    • 当你从 MS SQL 创建 edmx 文件时,你有 C# 生成的代码,如 context.Clients,当你从 Oracle 创建时,你有 C# 生成的代码,如 context.CLIENTS,所以我会有错误我的 .NET 应用程序中的编译时间
    • 我不想有不同的 C# 生成代码。我知道 Oracle 数据库会同时理解 Clients 和 CLIENTS,但我需要在 edmx 中成为“Clients”,而不是“CLIENTS”,并且我不能为他提供“Clients”,因为迁移工具将所有字母都大写。跨度>
    • 啊,好的,所以问题出在生成的 C# 代码上。你的 sn-p 来自生成的 DDL SQL,这让我很困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多