[英]HibernateException: Could not create the driver from NHibernate.Driver.MySqlDataDriver
[英]Fluent-nhibernate with .net core NHibernate.Driver.MySqlDataDriver
我在這里做錯了什么? 我已經安裝了 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");
}
}
演示.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();
}
}
程序.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: Could not create the driver from NHibernate.Driver.MySqlDataDriver, NHibernate, Version=4.0.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4. ---> System.Reflection.TargetInvocationException:調用的目標已拋出異常。 ---> System.ArgumentException:在已注冊的 .NET 數據提供者列表中找不到指定的不變名稱“MySql.Data.MySqlClient” 。 at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName, Boolean throwOnError) at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) at NHibernate.Driver.ReflectionBasedDriver..ctor(String providerInvariantName, String driverAssemblyName, String connectionTypeName,字符串 commandTypeName) 在 NHibernate.Driver.MySqlDataDriver..ctor()
--- End of inner exception stack trace --- at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean wrapExceptions, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& hasNoDefaultCtor) at System.RuntimeType.CreateInstanceDefaultCtorSlow(Boolean publicOnly, Boolean wrapExceptions, Boolean fillCache) at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type) at NHibernate .Bytecode.ActivatorObjectsFactory.CreateInstance(類型類型)在 NHibernate.Connec tion.ConnectionProvider.ConfigureDriver(IDictionary`2 設置)
--- End of inner exception stack trace --- at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary'2 settings) at NHibernate.Connection.ConnectionProvider.Configure(IDictionary'2 settings) at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary '2 settings) at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action'1 scriptAction, Boolean execute, Boolean justDrop, TextWriter exportOutput) at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action'1 scriptAction, Boolean execute, Boolean justDrop ) at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean useStdOut, Boolean execute, Boolean justDrop) at NHibernate.Tool.hbm2ddl.Sc hemaExport.Create(Boolean useStdOut, Boolean execute) at nhibernatetutorial.Demo.<>c.b__3_1(Configuration cfg) in C:\Users\user\nhibernatetutorial\Demo.cs:line 31 at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() --- 內部異常堆棧跟蹤結束 --- 在 FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() 在 FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()--- 內部異常堆棧跟蹤結束 --- 在 FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() 在 nhibernatetutorial.Demo.InitializeSessionFactory() 在 C:\Users\user\nhibernatetutorial\Demo.cs:line 24 at nhibernatetutorial.Demo .get_SessionFactory() in C:\Users\user\nhibernatetutorial\Demo.cs: 第 16 行 nhibernatetutorial.Demo.OpenSession() 在 C:\Users\Users\nhibernatetutorial\Demo.cs:line 16 處 nhibernatetutorial.Demo.OpenSession() (String[] args) 在 C:\Users\user\nhibernatetutorial\Program.cs:line 9
通過查看您的異常:
' 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 連接器文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.