也许我做错了什么,但它是这样的:
我正在尝试使用OracleXE版本10.2.0.1.0中的subsonic.migrations创建一个数据库。我已经安装了ODPv10.2.0.2.20。
这是我的app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
</configSections>
<connectionStrings>
<add name="test" connectionString="Data Source=XE; User Id=test; Password=test;"/>
</connectionStrings>
<SubSonicService defaultProvider="test">
<providers>
<clear/>
<add name="test" type="SubSonic.OracleDataProvider, SubSonic" connectionStringName="test" generatedNamespace="testdb"/>
</providers>
</SubSonicService>
</configuration>这是我的第一次迁移:
public class Migration001_Init : Migration {
public override void Up() {
//Create the records table
TableSchema.Table records = CreateTable("asdf");
records.AddColumn("RecordName");
}
public override void Down() {
DropTable("asdf");
}
}当我运行sonic.exe时,我得到了这个异常:
Setting ConfigPath: 'App.config'
Building configuration from D:\Users\carlucci\Documents\Visual Studio 2008\Projects\Wum\Wum.Migration\App.config
Adding connection to test
ERROR: Trying to execute migrate
Error Message: System.Data.OracleClient.OracleException: ORA-02253: especifica‡Æo de restri‡Æo nÆo permitida aqui
at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
at System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor)
at System.Data.OracleClient.OracleCommand.ExecuteNonQuery()
at SubSonic.OracleDataProvider.ExecuteQuery(QueryCommand qry) in D:\@SubSonic\SubSonic\SubSonic\DataProviders\OracleDataProvider.cs:line 350
at SubSonic.DataService.ExecuteQuery(QueryCommand cmd) in D:\@SubSonic\SubSonic\SubSonic\DataProviders\DataService.cs:line 544
at SubSonic.Migrations.Migrator.CreateSchemaInfo(String providerName) in D:\@SubSonic\SubSonic\SubSonic.Migrations\Migrator.cs:line 249
at SubSonic.Migrations.Migrator.GetCurrentVersion(String providerName) in D:\@SubSonic\SubSonic\SubSonic.Migrations\Migrator.cs:line 232
at SubSonic.Migrations.Migrator.Migrate(String providerName, String migrationDirectory, Nullable`1 toVersion) in D:\@SubSonic\SubSonic\SubSonic.Migrations\Migrator.cs:line 50
at SubSonic.SubCommander.Program.Migrate() in D:\@SubSonic\SubSonic\SubCommander\Program.cs:line 264
at SubSonic.SubCommander.Program.Main(String[] args) in D:\@SubSonic\SubSonic\SubCommander\Program.cs:line 90
Execution Time: 379ms我做错了什么?
非常感谢您的帮助:)
安德烈·卡鲁奇
更新:正如安东所指出的,问题出在亚音速OracleSqlGenerator。它正在尝试使用以下sql创建架构表:
CREATE TABLE SubSonicSchemaInfo (
version int NOT NULL CONSTRAINT DF_SubSonicSchemaInfo_version DEFAULT (0)
)这在甲骨文上不起作用。正确的sql应该是:
CREATE TABLE SubSonicSchemaInfo (
version int DEFAULT (0),
constraint DF_SubSonicSchemaInfo_version primary key (version)
)有趣的是,由于这是亚音速迁移执行的第一个sql,没有人在oracle上测试过它。
发布于 2009-04-17 15:27:36
这只是个胡乱猜测(我不太清楚Oracle的确切CREATE TABLE语法):SubSonic试图创建一个"Schema Info“表(参见this,搜索private static void CreateSchemaInfo(string providerName)),默认值为"0”。在内部,它使用的OracleGenerator基本上就是一个ANSIGenerator,所以这可能是问题所在。
发布于 2009-04-17 18:26:58
这是我的错。我没有Oracle的许可证,也对它的工作原理一无所知。我试图做的(关于SQL生成)是一个基类,它生成符合ANSI标准的SQL (是啊,我知道-但一个人可以梦想),每个提供者可以根据需要调整虚拟方法。
Eric和其他人(使用Oracle)测试了大多数查询等-但您是对的-我们从来没有机会在Oracle上测试迁移。这是我的错,我要承担责任。我需要花一些时间来了解Oracle -或者找到一个愿意在这里投入更多时间的提交者。
https://stackoverflow.com/questions/760821
复制相似问题