c# oracle 7.3.3版本,C#:结构-爱上MVC3~将系统的路由...-修改Orchard对Oracle 11g数据库支持_169IT.COM...

Orchard修改支持Oracle数据库,具体参考http://orchard.codeplex.com/discussions/401440,同时结合自己实际操作,现在已经能成功运行。

具体步骤如下:

1、准备数据库

Orcale数据库不支持数据自增,因此要使用id自动增加就需要建立序列在每次插入数据的时候就要获取序列一次。

Execute SQL query: create sequence hibernate_sequence

2、限制标识符长度。Oracle中标识符(表名和列名)不能超过30个字符。

a)确保自定义模块中的数据库记录的所有字段名不超过30个字符;

b)替换“ContentFieldDefinitionRecord”为“ContentFieldDefRecord”;

在以下文件中:

src\Orchard.Tests.Modules\Widgets\Services\WidgetsServiceTest.cs

src\Orchard.Web\Core\Settings\Metadata\ContentDefinitionManager.cs

src\Orchard.Web\Core\Settings\Metadata\Records\ContentFieldDefinitionRecord.cs

src\Orchard.Web\Core\Settings\Metadata\Records\ContentPartFieldDefinitionRecord.cs

src\Orchard.Web\Core\Settings\Migrations.cs

src\Orchard.Core.Tests\Settings\Metadata\ContentDefinitionManagerTests.cs

c)创建一个实用工具类,将所有的表名变短。(在我的项目,在类TableAliasGenerator中有一个返回唯一表别名的函数);

在我实际操作过程中,只是简单采用截取30个字符(因为我试验发现好像Orchard中,有两个表名到第29个字符才不一样,同时这样截取是不能再加前缀,否则字数将超过30。)

d) 使用TableAliasGenerator。

i. Orchard.Setup.Services.SetupService.Setup function:

var tableName = TableAliasGenerator.Generate(tablePrefix + "Settings_ShellDescriptorRecord");

ii. (Orchard.Framework)Orchard.Data.Migration.Schema.SchemaBuilder. Aplly it in all statements like this:

CreateTableCommand(TableAliasGenerator.Generate(String.Concat(_formatPrefix(_featurePrefix), name)));

iii. (Orchard.Framework)Orchard.Environment.ShellBuilders.CompositionStrategy.BuildRecord function:

return new RecordBlueprint {

Type = type,

Feature = feature,

TableName = TableAliasGenerator.Generate(dataTablePrefix + extensionName + '_' + type.Name);

}

3、使所有列名变为大写。Oracle数据库在执行“select”时,所有列名是转换为大写字母执行的。因此Orchard里定义的列名是不能在Oracle中访问的。

private string columnName;

public string ColumnName

{

get { return columnName; }

set { columnName = value.ToUpper(); }

}

4、给标识符添加引号。

修改Orchard.Data.Migration.Interpreters.DefaultDataMigrationInterpreter.Visit(CreateTableCommand command) function:

builder.Append(_dialect.PrimaryKeyString) .Append(" ( ") .Append(String.Join(", ", primaryKeys.Select(key => "\"" + key + "\"").ToArray())) .Append(" )");

5、在所有'create table'查询中,将“NVARCHAR2”数据类型改为“VARCHAR2”。在Orchard中有些列是NVARCHAR2(2048)类型,但是在Oracle中限制为NVARCHAR2(2000),因此采用VARCHAR2替代NVARCHAR2。

在Orchard.Data.Migration.Interpreters.DefaultDataMigrationInterpreter.GetTypeName function末尾添加:

if (_dialect is NHibernate.Dialect.Oracle9iDialect)

{

result = result.Replace("NVARCHAR2", "VARCHAR2");

}//result - is a return value

6、替换“Number”为“Number_”。因为在Oracle数据库中,“Number”是保留字。

在以下文件中:

Orchard.ContentManagement.Records.ContentItemVersionRecord

Orchard.ContentManagement.DataMigrations.FrameworkDataMigration

Orchard.Tests.ContentManagement.DefaultContentManagerTests

Orchard.ContentManagement.ContentItem

Orchard.ContentManagement.DefaultContentManager

7、Oracle数据库不支持空字符串,将空字符串认为是null。

修改 Orchard.Alias.Implementation.Updater.AliasHolderUpdater.Refresh function:

_aliasHolder.SetAliases(aliases

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值