Не удалось создать драйвер из NHibernate.Driver.MySqlDataDriver в Mono - PullRequest
2 голосов
/ 01 ноября 2011

Я создал небольшое приложение, в котором я использую Fluent Nhibernate.Приложение работает нормально на Windows, но исключение в Mono.

    ---> NHibernate.HibernateException: Could not create the driver from
NHibernate.Driver.MySqlDataDriver, NHibernate, Version=3.1.0.4000,
Culture=neutral, PublicKeyToken=aa95f207798dfdb4. --->
System.Reflection.TargetInvocationException: Exception has been thrown
by the target of an invocation. --->
System.Configuration.ConfigurationErrorsException: Failed to find or
load the registered .Net Framework Data Provider
'MySql.Data.MySqlClient'.
 at System.Data.Common.DbProviderFactories.GetFactory (System.String
providerInvariantName) [0x00000] in <filename unknown>:0 

Я использую Kubuntu 11.10 и Mono 2.10.5.Свободная версия NHibernate - 1.2.Fluent NHibernate не полностью поддерживается в Mono?

1 Ответ

2 голосов
/ 01 ноября 2011

Исходя из моего опыта, Fluent NHibernate отлично работает на Mono.

На самом деле я только вчера получил эту работу.К сожалению, у меня нет своего кода передо мной, но я дам вам несколько советов, пока не смогу опубликовать рабочий код ...

Я предполагаю, что вы загрузили MySql.Data.dll и ссылается на него в вашем проекте Mono.Следует обратить внимание на то, что после загрузки этот файл обычно называется MySQL.Data.dll .Он должен быть переименован в MySql.Data.dll (обратите внимание на изменение регистра в ' Q ' и ' L ').

Затем библиотека должна быть зарегистрирована в GAC для работы с Mono.Простое размещение файла в относительном пути и ссылка на него не работает (я не совсем уверен, почему).Более подробная информация - здесь .

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);
}
...