我正在尝试将我的rails the应用程序移植到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 我的数据库使用两个扩展:hstore和PostGIS。当我移除这两个扩展时,sqlmetal设法正确地创建模式。这两个扩展都会导致错误--当我只删除一个(两者都尝试过)时,我仍然会得到它。当然,删除这些扩展并不是一个选择.
据我所知,问题是sqlmetal不理解在这些扩展中定义的自定义类型。我搜索了web,发现我需要使用自定义模式加载程序来定义如何处理这些类型,sqlmetal的嵌入式文档说我应该使用--with-schema-loader来完成它,但我仍然找不到如何处理这些类型:
--with-schema-loader定义了用作自定义加载器的类,但在哪里可以指定包含该类的DLL文件?有人能告诉我怎么做到这一点吗?
发布于 2013-09-04 19:33:16
我的最终解决方案是完全不对SQL使用Linq,而是使用micro (PetaPoco)。
https://stackoverflow.com/questions/18213969
复制相似问题