Свободный-nhibernate с ядром .net NHibernate.Driver.MySqlDataDriver - PullRequest
0 голосов
/ 02 ноября 2019

Что я тут не так сделал? Я установил пакеты с нюгетерами nhibernate, fluentnhibernate и System.Data.SqlClient. Я новичок в nhibernate и ORM в целом.

Здесь код и ошибка:

public class Animal
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}


public class AnimalMap : ClassMap<Animal>
{
    public AnimalMap() {
        Id(x => x.Id);
        Map(x => x.Name);
        Table("animals");
    }
}

Demo.js

public class Demo
{
    private static ISessionFactory _sessionFactor;
    private static ISessionFactory SessionFactory{
        get {
            if(_sessionFactor == null) {
                InitializeSessionFactory();
            }
            return _sessionFactor;
        }
    }

    private static void InitializeSessionFactory () {
        DbProviderFactories.RegisterFactory("System.Data.SqlClient", SqlClientFactory.Instance);
        _sessionFactor = Fluently.Configure()
        .Database(MySQLConfiguration.Standard
        .ConnectionString(
            "Server=localhost;Database=xxx;Uid=root;Pwd=666;"
        ))
        .Mappings(mappings => mappings.FluentMappings
        .AddFromAssemblyOf<Program>())
        .ExposeConfiguration(cfg => new SchemaExport(cfg)
        .Create(true, true))
        .BuildSessionFactory();
    }

    public static ISession OpenSession() {
        return SessionFactory.OpenSession();
    }
}

Program.cs

static void Main(string[] args)
    {
        using (var session = Demo.OpenSession()) {
            using (var transaction = session.BeginTransaction()) {
                var animal = new Animal {
                    Name = "Cat"
                };
                session.Save(animal);
                transaction.Commit();
            }
        }
    }

Когда я запускаю это консольное приложение ядра .net, я получаю сообщение об ошибке ниже

Необработанное исключение. FluentNHibernate.Cfg.FluentConfigurationException: При создании SessionFactory использовалась неверная или неполная конфигурация. Проверьте коллекцию PotentialReasons и InnerException для получения более подробной информации.

---> FluentNHibernate.Cfg.FluentConfigurationException: При создании SessionFactory использовалась недопустимая или неполная конфигурация. Проверьте коллекцию PotentialReasons и InnerException для получения более подробной информации.

---> NHibernate.HibernateException: Не удалось создать драйвер из NHibernate.Driver.MySqlDataDriver, NHibernate, Version = 4.0.0.4000, Culture = нейтральный, PublicKeyToken =aa95f207798dfdb4. ---> System.Reflection.TargetInvocationException: исключение было сгенерировано целью вызова. ---> System.ArgumentException: указанное имя инварианта 'MySql.Data.MySqlClient' не найдено в списке зарегистрированных поставщиков данных .NET . в System.Data.Common.DbProviderFactories.GetFactory (String providerInvariantName, Boolean throwOnError) в System.Data.Common.DbProviderFactories.GetFactory (String providerInvariantName) в NHibernate.Driver.ReflectionBaseName, StringNameNameSigningSingringring ()Строка commandTypeName) в NHibernate.Driver.MySqlDataDriver..ctor ()
--- Конец трассировки стека внутренней исключительной ситуации --- в System.RuntimeTypeHandle.CreateInstance (тип RuntimeType, логический publicOnly, логический тип wrapExceptions, Boolean & canBendhond и canBeternal), Boolean & hasNoDefaultCtor) в System.RuntimeType.CreateInstanceDefaultCtorSlow (Boolean publicOnly, логическое wrapExceptions, Boolean fillCache) в System.RuntimeType.CreateInstanceDefaultCtor (Boolean тип PublicOnly, логический указатель на повышение класса, логический объектnonPublic, Boolean wrapExceptions) в System.Activator.CreateInstance(Тип type) в NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance (Тип type) в NHibernate.Connection.ConnectionProvider.ConfigureDriver (настройки IDictionary`2)
--- Конец внутренней трассировки стека исключений --- в NHibernate.Connection. ConnectionProvider.ConfigureDriver (параметры IDictionary'2) в NHibernate.Connection.ConnectionProvider.Configure (параметры IDictionary'2) в NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider (параметры IDictionary'2) в NHibernate.Tool.hbm2ddlExma1 scriptAction, Boolean execute, Boolean justDrop, TextWriter exportOutput) в NHibernate.Tool.hbm2ddl.SchemaExport.Execute (Action'1 scriptAction, Boolean execute, Boolean justDrop) в NHibernate.Tool.hbm2ddl.SchemaExport. , Boolean justDrop) в NHibernate.Tool.hbm2ddl.SchemaExport.Create (Boolean useStdOut, Boolean execute) в nhibernatetutorial.Demo. <> C.b__3_1 (Конфигурация cfg) в C: \ Users \ user \ nhibernatetutorial \ Demo.cs:строка 31 в FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration () --- Конец трассировки стека внутренних исключений --- в FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration () в FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory ()

1028--- Конец внутренней трассировки стека исключений --- в FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory () в nhibernatetutorial.Demo.InitializeSessionFactory () в C: \ Users \ user \ nhibernatetutorial \ Demo.cs: строка 24в nhibernatetutorial.Demo.get_SessionFactory () в C: \ Users \ user \ nhibernatetutorial \ Demo.cs: строка 16 в nhibernatetutorial.Demo.OpenSession () в C: \ Users \ user \ nhibernatetutorial \ Demo.cs: строка 37 в nhibernatetutorial.Program.Main (String [] args) в C: \ Users \ user \ nhibernatetutorial \ Program.cs: строка 9

1 Ответ

1 голос
/ 03 ноября 2019

Рассматривая ваше исключение:

' MySql.Data.MySqlClient ' не найдено в списке зарегистрированных поставщиков данных .NET

Вы можете видеть, что nhibernate не может создать экземпляр драйвера для mysql из-за отсутствующей зависимости.
Вам необходимо добавить провайдера в конфигурации, подобные этой:

<entityFramework>
  <providers>
    <provider invariantName="MySql.Data.MySqlClient"
              type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
  </providers>
</entityFramework>

За дополнительной информацией вы можете обратиться к официальной документации mysql для коннекторов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...