Как использовать DbLinq SqlMetal для MySQL на Mac? - PullRequest
2 голосов
/ 02 марта 2011

Я использую Mono / MonoDevelop в Mac OS и хочу получить пример использования SqlMetal (версия DbLinq, включенная в Mono) для LINQ-to-SQL с базой данных MySQL.

Как ни странно, я нашел много примеров для SQLite, но ни одного для MySQL. Примеры, найденные для MySQL, относятся к SqlMetal.exe от Microsoft.

Я попытался настроить команду sqlmetal из SQLite, чтобы адаптировать ее для MySQL, но у меня есть это сообщение:

sqlmetal: Не удалось загрузить тип databaseConnectionType типа «ByteFX.Data.MySqlClient.MySqlConnection, ByteFX.Data». Попробуйте использовать параметр --with-dbconnection = TYPE.

Помощь приветствуется! Спасибо.

Ответы [ 3 ]

3 голосов
/ 09 апреля 2011

Найдите и отредактируйте файл 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 голос
/ 12 июня 2013
  1. Загрузите и установите MySQL Connector / Net согласно http://www.mono -project.com / MySQL

    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 (или эквивалент для версиивы используете) и отредактируйте атрибут databaseConnection узла <provider name="MySQL" в соответствии с ответом BlackR2D, используя свойства из папки на шаге 2, например Version=6.6.5.0 и PublicKeyToken=c5687fc88969c44d

  4. Убедитесь, что путь к проекту, в котором вы работаете, не содержит пробелов, или вы можете получить сообщение об ошибке «MonoDevelop.Database.Sql.SqlMetalExecException: sqlmetal: Не удалось найти файл»

  5. Когда вы выбираете «Создать класс Linq», измените язык на 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'
0 голосов
/ 27 июня 2011

У меня это работает на моно 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
...