我正在尝试将我的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
我的数据库使用两个扩展程序:hstore和PostGIS。当我删除这两个扩展时,sqlmetal设法正确创建模式。这两个扩展都会导致错误 - 当我只删除一个(尝试过两个)时,我仍然会得到它。当然,删除这些扩展并不是一种选择......
据我所知,问题是sqlmetal不理解这些扩展中定义的自定义类型。我在网上搜索并发现我需要使用自定义模式加载器来定义如何处理这些类型,而sqlmetal的嵌入式文档说我应该用--with-schema-loader
来做 - 但我仍然无法找到这样做:
--with-schema-loader
定义用作自定义加载器的类,但是在哪里可以指定包含该类的DLL文件?任何人都可以告诉我如何做到这一点吗?
答案 0 :(得分:0)
我的最终解决方案是根本不使用Linq to SQL,而是使用微型ORM(PetaPoco)