2009-04-17 9 views
0

아마 내가 뭔가를 잘못하고 있어요하지만 여기 간다 : 내가 OracleXE 버전 10.2.0.1.0에서 subsonic.migrations을 사용하여 데이터베이스를 만들려고 해요subsonic.migrations 오라클 XE

. 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> 

그리고 내 첫 이주의 :

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 
: 나는 sonic.exe을 실행하면

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"); 
     } 
    } 

, 나는이 예외가

내가 뭘 잘못하고 있니?

감사합니다 도움 :

앙드레 칼 루치

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 때문에, 아무도 오라클에 그것을 테스트 없다는 것입니다.

답변

1

그냥 추측 (I 오라클에 대한 정확한 CREATE TABLE 구문에 대한 정확히 잘 모르는 것 같아요) : 음속 시도 (private static void CreateSchemaInfo(string providerName) 검색, this 참조) "스키마 정보"테이블을 생성하는 "0"의 기본 가치와. 내부적으로는 기본적으로 ANSIGeneratorOracleGenerator을 사용하므로 문제가 될 수 있습니다.

+0

네가 맞아! 단계별로 디버깅을 한 결과 아음속이 SQL을 완전히 오라클에 사용하고있는 것을 볼 수있었습니다. 고맙습니다! – andrecarlucci

0

이것은 내 잘못입니다. 필자는 Oracle에 대한 라이센스가 없으며 어떻게 작동하는지에 대한 단서가 없습니다. 내가 (SQL 생성과 관련하여) 시도한 것은 ANSI 호환 SQL (yah, 나도 알아 -하지만 남자가 꿈꿀 수 있음)을 생성하는 기본 클래스를 각 가상 공급자가 필요에 따라 조정할 수있는 가상 메서드로 만드는 것이 었습니다.

Eric 및 기타 (Oracle을 사용하는 사용자)는 대부분의 쿼리를 테스트했지만 정확합니다. 오라클에서 마이그레이션을 테스트 할 기회는 없었습니다. 이것은 내 잘못이고 나는 책임을진다. 필자는 오라클에 대해 알기 위해 시간을 할애해야합니다. 또는 여기에 더 많은 시간을 할애하려는 커미터를 찾아야합니다.

+0

그것은 또한 아음속이 존재하고 정직하게 생각하자, 그것은 정말로 흔들립니다. 오라클에 관해서는 오라클 익스프레스 (http://www.oracle.com/technology/products/database/xe/index.html)를 다운로드 할 수있다. 개발 용 무료 버전이며 필요한 모든 기능을 갖추고있다. 어쨌든 이것에 대해 살펴 보겠습니다. – andrecarlucci