C# 流利的nhibernate,具有.net核心nhibernate.Driver.MySqlDataDriver

C# 流利的nhibernate,具有.net核心nhibernate.Driver.MySqlDataDriver,c#,asp.net-core,nhibernate,fluent-nhibernate,C#,Asp.net Core,Nhibernate,Fluent Nhibernate,我做错了什么?我已经安装了nhibernate、fluentnhibernate和System.Data.SqlClient nuget软件包。我是nhibernate和ORM的新手 此处显示代码和错误: public class Animal { public virtual int Id { get; set; } public virtual string Name { get; set; } } public class AnimalMap : ClassMap<

我做错了什么?我已经安装了nhibernate、fluentnhibernate和System.Data.SqlClient nuget软件包。我是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");
    }
}
当我运行这个.net核心控制台应用程序时,我得到以下错误

未处理的异常。FluentNHibernate.Cfg.FluentConfigurationException:创建SessionFactory时使用了无效或不完整的配置。有关详细信息,请检查潜在原因集合和InnerException

--->FluentNHibernate.Cfg.FluentConfigurationException:创建SessionFactory时使用了无效或不完整的配置。有关详细信息,请检查潜在原因集合和InnerException

--->NHibernate.HibernateeException:无法从NHibernate.driver.MySqlDataDriver创建驱动程序,NHibernate,版本=4.0.0.4000,区域性=中性,PublicKeyToken=aa95f207798dfdb4。 --->System.Reflection.TargetInvocationException:调用的目标已引发异常。 --->System.ArgumentException:在已注册的.NET数据提供程序列表中找不到指定的固定名称“MySql.Data.MySqlClient”
。 位于System.Data.Common.DbProviderFactorys.GetFactory(字符串providerInvariantName,布尔错误) 位于System.Data.Common.DbProviderFactorys.GetFactory(字符串providerInvariantName) 位于NHibernate.Driver.ReflectionBasedDriver..ctor(字符串提供程序变量名、字符串驱动程序名称、字符串连接类型名、字符串命令类型名) 位于NHibernate.Driver.MySqlDataDriver..ctor()
---内部异常堆栈跟踪的结束--- 在System.RuntimeTypeHandle.CreateInstance(RuntimeType类型、Boolean publicOnly、Boolean WrapeExceptions、Boolean&canBeCached、RuntimeMethodHandleInternal&ctor、Boolean&HasNodeDefault) 位于System.RuntimeType.CreateInstanceDefaultCtorSlow(布尔publicOnly、布尔WrapeExceptions、布尔fillCache) 位于System.RuntimeType.CreateInstanceDefaultCtor(布尔publicOnly、布尔skipCheckThis、布尔fillCache、布尔WrapeExceptions) 在System.Activator.CreateInstance(类型类型、布尔非公共、布尔WrapeExceptions) 位于System.Activator.CreateInstance(类型) 位于NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(类型) 在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.hbm2ddl.SchemaExport.Execute(操作的1脚本操作、布尔执行、布尔justDrop、TextWriter输出) 在NHibernate.Tool.hbm2ddl.SchemaExport.Execute(操作的1脚本操作、布尔执行、布尔justDrop) 在NHibernate.Tool.hbm2ddl.SchemaExport.Execute(布尔useStdOut、布尔Execute、布尔justDrop) 在NHibernate.Tool.hbm2ddl.SchemaExport.Create(布尔useStdOut,布尔执行) 在c:\Users\user\nhibernatetutorial\Demo.c.b\u 3\u 1(配置cfg)中的nhibernatetutorial.Demo.cs:第31行 在FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration()中 ---内部异常堆栈跟踪的结束--- 在FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration()中 在FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()中

---内部异常堆栈跟踪的结束--- 在FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()中 在C:\Users\user\nhibernatetutorial\Demo.cs中的nhibernatetutorial.Demo.InitializeSessionFactory()处:第24行 在C:\Users\user\nhibernatetutorial\Demo.cs中的nhibernatetutorial.Demo.get_SessionFactory()处:第16行 在C:\Users\user\nhibernatetutorial\Demo.cs中的nhibernatetutorial.Demo.OpenSession()处:第37行 在C:\Users\user\nhibernatetutorial\Program.cs中的nhibernatetutorial.Program.Main(字符串[]args)处:第9行


通过查看您的异常:

在已注册的.NET数据提供程序列表中未找到“MySql.Data.MySqlClient

您可以看到,由于缺少依赖项,nhibernate无法为mysql实例化驱动程序。
您需要在以下配置中添加提供程序:


有关更多信息,请查看官方网站

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