Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 制作mono&x27;SqlMetal了解PostgreSQL中用户/扩展定义的类型_.net_Postgresql_Mono_Sqlmetal - Fatal编程技术网

.net 制作mono&x27;SqlMetal了解PostgreSQL中用户/扩展定义的类型

.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

我正在尝试将我的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 
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)