2

我在 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 选项。

帮助表示赞赏!谢谢你。

4

3 回答 3

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 连接器)

问候

于 2011-04-09T13:41:51.213 回答
1
  1. 根据http://www.mono-project.com/MySQL下载并安装 MySQL Connector/Net

    cd path_to_your MySql.Data.dll assembly
    gacutil -i MySql.Data.dll
    
  2. 浏览到/Library/Frameworks/Mono.framework/Versions/2.10.12/lib/mono/gac/MySql.Data(或更改版本号以匹配您正在使用的版本),您应该会看到目录,例如6.6.5.0__c5687fc88969c44d

  3. 打开/Library/Frameworks/Mono.framework/Versions/2.10.12/lib/mono/4.0/sqlmetal.exe.config(或您正在使用的版本的等效版本)并根据 BlackR2D 的回答编辑节点的databaseConnection属性 ,使用步骤 2 中文件夹中的属性,例如和<provider name="MySQL"Version=6.6.5.0PublicKeyToken=c5687fc88969c44d

  4. 确保您正在运行的项目的路径中没有空格,否则您可能会收到“MonoDevelop.Database.Sql.SqlMetalExecException:sqlmetal:找不到文件”错误

  5. When you select 'Generate Linq Class' change the language to C# rather than C#2 otherwise you may get a 'MonoDevelop.Database.Sql.SqlMetalExecException: sqlmetal: Object reference not set to an instance of an object' error

I can then generate Output.cs, but still get an error if trying to generate DBML (Output.dbml):

'MonoDevelop.Database.Sql.SqlMetalExecException: sqlmetal: Access to the path "//Output.dbml" is denied'
于 2013-06-12T15:19:06.100 回答
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
于 2011-06-26T21:56:52.580 回答