簡體   English   中英

Fluent-nhibernate 與 .net 核心 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM