2009-04-17 10 views
0

は、おそらく私が何か間違ったことをやっているが、ここでは行く:subsonic.migrationsとOracle XE

私はOracleXEバージョン10.2.0.1.0でsubsonic.migrationsを使用してデータベースを作成しようとしています。 ODP v 10.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 

私は間違って何をしていますか?任意の助け

どうもありがとう:)

アンドレCarlucci

UPDATE: アントンで指摘したように、問題は亜音速OracleSqlGeneratorです。このSQLを使用してスキーマ・テーブルを作成しようとしています。

CREATE TABLE SubSonicSchemaInfo (
     version int NOT NULL CONSTRAINT DF_SubSonicSchemaInfo_version DEFAULT (0) 
) 

これはOracleでは機能しません。正しいSQLは次のようになります。

CREATE TABLE SubSonicSchemaInfo (
    version int DEFAULT (0), 
    constraint DF_SubSonicSchemaInfo_version primary key (version) 
) 

面白いことに、これが亜音速の移行で実行される非常に最初のSQLであることから、誰もOracleでそれをテストしていないということです。

答えて

1

ちょうど野生の推測(私はOracleのための正確なCREATE TABLE構文について正確に認識していないよ):「0」がデフォルト値であると(private static void CreateSchemaInfo(string providerName)を検索、thisを参照してください)「スキーマ情報」テーブルを作成するために、亜音速の試み。内部的には、基本的にANSIGeneratorOracleGeneratorが使用されているため、問題が発生する可能性があります。

+0

あなたは正しいです!私はステップ・バイ・ステップでステップを実行し、サブソニックはOracleとは全く別のSQLを使用していることが分かりました。ありがとうございました! – andrecarlucci

0

これは私の責任です。私はOracleのライセンスを持っていないし、それがどのように動作するかについて少しだけ手がかりを持っていない。私が(SQL生成に関して)しようとしたのは、ANSI準拠のSQLを生成する基本クラスを用意することでした(仮想化されたメソッドを使用して、各プロバイダが必要に応じて微調整できます)。

Ericと他の人(Oracleを使用している人)はほとんどのクエリをテストしましたが、正しいですが、Oracle上でMigrationsをテストする機会はありませんでした。これは私のせいです。私は責任を取っています。私はOracleを知るために時間を取る必要があります - またはここでもっと時間を費やすコミット者を見つける。

+0

それはまた、亜音速が存在し、正直に言うと、それは本当に岩です。 oracleについては、Oracle Express(http://www.oracle.com/technology/products/database/xe/index.html)をダウンロードできます。開発用の無料版であり、必要なすべての機能を備えています。とにかくこれを見てみましょう、歓声! – andrecarlucci

関連する問題