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。当我删除这两个扩展时,sqlmetal 设法正确创建模式。两个扩展都会导致错误 - 当我只删除一个(都尝试过)时,我仍然得到它。当然,删除这些扩展并不是一个真正的选择......

据我所知,问题在于 sqlmetal 不理解这些扩展中定义的自定义类型。我在网上搜索过,发现我需要使用自定义模式加载器来定义如何处理这些类型,而 sqlmetal 的嵌入式文档说我应该这样做--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 回答