從我的經驗來看,流利的NHibernate在Mono上工作得很好。
我其實昨天才工作。不幸的是,我沒有我的代碼在我面前,但我會給你一些提示,直到我可以發佈工作代碼...
我假設你已經下載了MySql.Data.dll和在您的Mono項目中引用它。需要注意的是,該文件通常在下載後稱爲MySQL.Data.dll。它應該重命名爲MySql.Data.dll(請注意'Q'和'L'上的案例更改)。
然後,該庫必須在GAC中註冊才能與Mono一起使用。簡單地將文件放在相對路徑中並引用它不起作用(我不完全確定爲什麼)。更多的信息是here。
gacutil /i MySql.Data.dll
如果仍然無法正常工作,您可能需要編寫從NHibernate.Driver.ReflectionBasedDriver下降的驅動程序。這是一段非常小的代碼,稍後我會發布。
編輯:這是我使用的MySQL驅動程序。
public class MySqlDriver : NHibernate.Driver.ReflectionBasedDriver
{
public MySqlDriver() : base(
"MySql.Data, Version=6.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d",
"MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d",
"MySql.Data.MySqlClient.MySqlCommand, MySql.Data, Version=6.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
) { }
public override bool UseNamedPrefixInParameter
{
get { return true; }
}
public override bool UseNamedPrefixInSql
{
get { return true; }
}
public override string NamedPrefix
{
get { return "@"; }
}
public override bool SupportsMultipleOpenReaders
{
get { return false; }
}
}
...和會話工廠功能
private string _ConnectionString = "";
private ISessionFactory CreateSessionFactory()
{
return Fluently.Configure().Database(
MySQLConfiguration.Standard.Driver<MySqlDriver>().ConnectionString(_ConnectionString)
).Mappings(
m => m.FluentMappings.AddFromAssemblyOf<YourType>()
).ExposeConfiguration(
BuildSchema
).BuildSessionFactory();
}
private void BuildSchema(Configuration config)
{
//new SchemaExport(config).Create(false, true);
new SchemaUpdate(config).Execute(false, true);
}
來源
2011-11-01 13:31:49
ken
我試着在GAC中安裝它,但它不工作。我會嘗試大寫名字。這可能是Linux區分大小寫的原因。 – Sharique
感謝哥們。這是大小寫敏感性問題的原因。我將文件名更改爲MySql.Data.dll,它可以工作。如果MySql.Data.dll位於應用程序的bin文件夾中,它也可以工作。 – Sharique
謝謝@Sharique,我從'mysql.data.dll'通過'Mysql.data.dll'和'Mysql.Data.dll'直到你的'MySql.Data.dll'最終工作。 – domsom