C# 流利的nhibernate,具有.net核心nhibernate.Driver.MySqlDataDriver
我做错了什么?我已经安装了nhibernate、fluentnhibernate和System.Data.SqlClient nuget软件包。我是nhibernate和ORM的新手 此处显示代码和错误: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<
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();
}
}
}