.net 制作mono&x27;SqlMetal了解PostgreSQL中用户/扩展定义的类型
我正在尝试将我的rails webapp移植到C#(mono),我希望使用相同的数据库。当我尝试使用sqlmetal创建Linq架构时,我收到以下错误消息:.net 制作mono&x27;SqlMetal了解PostgreSQL中用户/扩展定义的类型,.net,postgresql,mono,sqlmetal,.net,Postgresql,Mono,Sqlmetal,我正在尝试将我的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.SchemaLoa
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:System.ArgumentException:不知道如何将SQL类型“name”转换为托管类型。
参数名称:数据类型
在:0中的DbLinq.Vendor.Implementation.SchemaLoader.MapDbType(System.String columnName,IDataType数据类型)[0x00000]处
在DbLinq.Vendor.Implementation.SchemaLoader.LoadColumns(DbLinq.Schema.Dbml.Database Schema,DbLinq.Schema.SchemaName SchemaName,IDbConnection,INameAliases nameliases,DbLinq.Schema.NameFormat NameFormat,DbLinq.Vendor.Implementation.Names)[0x00000]中:0
在DbLinq.Vendor.Implementation.SchemaLoader.Load(System.String databaseName,INameAliases NameAlias,DbLinq.Schema.NameFormat NameFormat,Boolean LoadStoredProcess,System.String contextNamespace,System.String entityNamespace)[0x00000 in:0
在DbMetal.Generator.Implementation.Processor.ReadSchema(DbMetal.Parameters参数,ISchemaLoader和schemaLoader)[0x00000]中:0
在:0中的DbMetal.Generator.Implementation.Processor.ProcessSchema(DbMetal.Parameters参数)[0x00000]处
我的数据库使用两个扩展:和。当我删除这两个扩展时,sqlmetal能够正确地创建模式。这两个扩展都会导致错误-当我只删除一个扩展时(两个扩展都尝试过),我仍然会得到它。当然,删除这些扩展并不是一个真正的选项
据我所知,问题在于sqlmetal不理解这些扩展中定义的自定义类型。我在网上搜索了一下,发现我需要使用一个自定义的模式加载器来定义如何处理这些类型,sqlmetal的嵌入式文档说我应该使用——模式加载器——但我仍然找不到如何做:
--with schema loader
定义用作自定义加载程序的类,但是在哪里可以指定包含该类的DLL文件
- 我应该如何编写模式加载器?我找不到一个例子,但是嵌入式文档说它需要实现ISchemaLoader。我找不到它的文档,也没有告诉我任何事情(我期望像MyBatis的YypeHandlers这样的东西…)
有人能给我一个如何实现这一点的线索吗?我的最终解决方案是根本不使用Linq to SQL,而是使用micro ORM(PetaPoco)