我在Mac OS上使用Mono / MonoDevelop,我想要一个使用SqlMetal(Mono附带的DbLinq版本)用于LINQ-to-SQL和MySQL数据库的示例。
奇怪的是,我发现了很多关于SQLite的例子,但没有找到MySQL的例子。 MySQL的示例似乎是指Microsoft的SqlMetal.exe。
我尝试从SQLite安排我的sqlmetal命令以使其适应MySQL,但我有这样的信息:
sqlmetal:无法加载databaseConnectionType类型'ByteFX.Data.MySqlClient.MySqlConnection,ByteFX.Data'。尝试使用--with-dbconnection = TYPE选项。
感谢帮助!谢谢。
答案 0 :(得分:3)
查找并编辑sqlmetal.exe.config并将设置替换为不使用ByteFX(LONG不支持)并使用MySql.Data。
请记住包括完全限定的程序集名称,在我的情况下,该行看起来像:
provider name="MySQL" dbLinqSchemaLoader="DbLinq.MySql.MySqlSchemaLoader, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" databaseConnection="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.2.3.0, Culture=neutral, PublicKeyToken=2f3544035097bf97"
(我安装了该版本和令牌的MySql Connector)
此致
答案 1 :(得分:1)
按照http://www.mono-project.com/MySQL
下载并安装MySQL Connector / Netcd path_to_your MySql.Data.dll assembly
gacutil -i MySql.Data.dll
浏览到/Library/Frameworks/Mono.framework/Versions/2.10.12/lib/mono/gac/MySql.Data
(或更改版本号以匹配您正在使用的版本),您应该会看到6.6.5.0__c5687fc88969c44d
打开/Library/Frameworks/Mono.framework/Versions/2.10.12/lib/mono/4.0/sqlmetal.exe.config
(或您正在使用的版本的等效文件)并根据BlackR2D的答案编辑databaseConnection
节点的<provider name="MySQL"
属性,使用例如,步骤2中的文件夹Version=6.6.5.0
和PublicKeyToken=c5687fc88969c44d
确保您正在运行的项目的路径中没有空格,否则您可能会收到'MonoDevelop.Database.Sql.SqlMetalExecException:sqlmetal:找不到文件'错误
当您选择“Generate Linq Class”时,将语言更改为C#而不是C#2,否则您可能会收到'MonoDevelop.Database.Sql.SqlMetalExecException:sqlmetal:对象引用未设置为对象的实例'错误
然后我可以生成Output.cs,但是在尝试生成DBML(Output.dbml)时仍然会出错:
'MonoDevelop.Database.Sql.SqlMetalExecException: sqlmetal: Access to the path "//Output.dbml" is denied'
答案 2 :(得分:0)
我使用单声道2.10.2:
[mono-] ~ @ sqlmetal /namespace:MonoService /provider:MySql "/conn:Server=[server];Database=[db];Uid=[name];Pwd=[pass];" /code:ProxyContext.cs --with-dbconnection="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
在我将MySql.Data放入gac之前:
gacutil -i MySql.Data.dll