0

Rails webapp を C#(mono) に移植しようとしていますが、同じデータベースを使用したいと考えています。sqlmetal を使用して Linq スキーマを作成しようとすると、次のエラー メッセージが表示されます。

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 

私のデータベースでは、 hstorePostGISの 2 つの拡張子を使用しています。これら 2 つの拡張機能を削除すると、sqlmetal によってスキーマが適切に作成されます。両方の拡張機能がエラーを引き起こします-1つだけを削除しても(両方で試してみました)、それでもエラーが発生します。もちろん、これらの拡張機能を削除することは実際にはオプションではありません...

私が理解できることから、問題は、sqlmetal がこれらの拡張機能で定義されたカスタム型を理解していないことです。Web を検索したところ、これらの型の処理方法を定義するにはカスタム スキーマ ローダーを使用する必要があることが--with-schema-loaderわかりました。

  • --with-schema-loaderはカスタム ローダーとして使用するクラスを定義していますが、そのクラスを含む DLL ファイルはどこで指定できますか?
  • そのスキーマ ローダーをどのように記述すればよいでしょうか。例が見つかりませんが、埋め込まれたドキュメントには、ISchemaLoader を実装する必要があると書かれています。ドキュメントが見つからず、ソースコードからは何もわかりません(MyBatisのYypeHandlersのようなものを期待していました...)

誰かがこれを行う方法について私に手がかりを与えることができますか?

4

1 に答える 1

0

私の最終的な解決策は、Linq to SQL をまったく使用せず、代わりにマイクロ ORM(PetaPoco) を使用することでした。

于 2013-09-04T19:33:16.203 に答える