2013-08-13 8 views
0

레일 웹 애플리케이션을 C# (모노)으로 이식하려고하는데 동일한 데이터베이스를 사용하고 싶습니다. 내가 sqlmetal를 사용하여 Linq에 스키마를 만들려고 할 때이 오류 메시지가 : hstorePostGIS :모노의 SqlMetal이 PostgreSQL에서 사용자/확장자 정의 타입을 이해하도록 만들기

sqlmetal: System.ArgumentException: Don't know how to convert the SQL type 'name' into a managed type. 
Parameter name: dataType 
    at DbLinq.Vendor.Implementation.SchemaLoader.MapDbType (System.String columnName, IDataType dataType) [0x00000] in <filename unknown>:0 
    at DbLinq.Vendor.Implementation.SchemaLoader.LoadColumns (DbLinq.Schema.Dbml.Database schema, DbLinq.Schema.SchemaName schemaName, IDbConnection conn, INameAliases nameAliases, DbLinq.Schema.NameFormat nameFormat, DbLinq.Vendor.Implementation.Names names) [0x00000] in <filename unknown>:0 
    at DbLinq.Vendor.Implementation.SchemaLoader.Load (System.String databaseName, INameAliases nameAliases, DbLinq.Schema.NameFormat nameFormat, Boolean loadStoredProcedures, System.String contextNamespace, System.String entityNamespace) [0x00000] in <filename unknown>:0 
    at DbMetal.Generator.Implementation.Processor.ReadSchema (DbMetal.Parameters parameters, ISchemaLoader& schemaLoader) [0x00000] in <filename unknown>:0 
    at DbMetal.Generator.Implementation.Processor.ProcessSchema (DbMetal.Parameters parameters) [0x00000] in <filename unknown>:0 

내 데이터베이스는이 확장을 사용합니다. 이 두 확장을 제거하면 sqlmetal이 스키마를 올바르게 작성 관리합니다. 두 확장 모두 오류를 발생시킵니다. 하나만 제거하면 (둘 다 시도했을 때) 여전히 오류가 발생합니다. 물론 그 확장을 제거하는 것은 실제로 선택 사항이 아닙니다. ...

내가 알아낼 수있는 것은 sqlmetal이 이러한 확장에 정의 된 사용자 정의 유형을 이해하지 못한다는 것입니다. 웹을 검색 한 결과 해당 유형을 처리하는 방법을 정의하기 위해 사용자 지정 스키마 로더를 사용해야한다는 것을 알았습니다. sqlmetal의 포함 된 문서는 --with-schema-loader으로 처리해야한다고 말하지만 여전히 어떻게 수행하는지 찾을 수 없습니다.

  • --with-schema-loader은 맞춤형 로더로 사용되는 클래스를 정의하지만 해당 클래스를 포함하는 DLL 파일은 어디에 지정할 수 있습니까?
  • 어떻게 그 스키마 로더를 작성해야합니까? 예제를 찾을 수 없지만 임베디드 문서에 ISchemaLoader를 구현해야한다고 나와 있습니다. 나는의 문서를 찾을 수 없으며, it's source code은 나에게 아무것도 말하지 않는다 (I는 MyBatis로 'YypeHandlers 같은 기대 ...)

사람이 나에게 어떻게 이것에 대한 단서를 줄 수 있습니까?

답변

0

최종 해결책은 SQL에 Linq를 사용하지 않고 마이크로 ORM (PetaPoco)을 사용하는 것입니다.