带有 Microsoft.Data.Sqlite 的 Fluent nhibernate BuildSessionFactory 无法工作

问题描述 投票:0回答:1

尝试使用流畅的nhibernate在Microsoft.Data.Sqlite上建立会话工厂。所有引用均已添加,并可在运行时在 bin 文件夹中使用。

var sessionFactory = Fluently.Configure()
    .Database(MsSqliteConfiguration.Standard.UsingFile(DbFilePath))
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<CheckExe>())
    .ExposeConfiguration(BuildSchema)
    .BuildSessionFactory();

此方法会抛出异常,因为“未定义请求的集合‘DataTypes’。”

尝试通过 config xml 和 c# 代码 set property 在配置 NHibernate.Driver.MicrosoftDataSqlClientDriver 和 NHibernate.Dialect.SQLiteDialect 中添加驱动程序和方言。但是,面临另一个拦截器错误,如下所示。

var cfg = new Configuration();
cfg.SetProperty("connection.connection_string", ConnectionString);
cfg.SetProperty("dialect", typeof(global::NHibernate.Dialect.SQLiteDialect).AssemblyQualifiedName);
cfg.SetProperty("connection.driver_class", typeof(global::NHibernate.Driver.MicrosoftDataSqlClientDriver).AssemblyQualifiedName);

Fluently.Configure(cfg).Mappings(m => m.FluentMappings.AddFromAssemblyOf<CheckExe>()).BuildSessionFactory();

无法从 NHibernate.Driver.MicrosoftDataSqlClientDriver、NHibernate、Version=5.4.0.0、Culture=neutral、PublicKeyToken=aa95f207798dfdb4 创建驱动程序。

也尝试过这种方式 - 导致了同样的错误

return Fluently.Configure()
    .Database(MsSqliteConfiguration.Standard.UsingFile(DbFilePath).Driver<MicrosoftDataSqlClientDriver>().Dialect<SQLiteDialect>())
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<CheckExe>())
    .ExposeConfiguration(BuildSchema)
    .BuildSessionFactory();
fluent-nhibernate microsoft.data.sqlite
1个回答
0
投票

_sessionFactory = Fluently.Configure().Database(MsSqliteConfiguration.Standard.ConnectionString(c => c.Is($"数据源={_dbFilePath};")).Dialect().Driver()) .Mappings(m => m.FluentMappings.AddFromAssemblyOf()) .ExposeConfiguration(BuildSchema).BuildSessionFactory();

这对我有用并且异常得到解决,但是如果我们尝试再次创建会话工厂,则会出现另一个异常 错误 NHibernate.Tool.hbm2ddl.SchemaUpdate - 无法完成架构更新 System.ArgumentException:提供的限制比集合“Tables”支持的限制更多。 在 Microsoft.Data.Sqlite.SqliteConnection.GetSchema(字符串集合名称,字符串 [] 限制值) 在NHibernate.Dialect.Schema.AbstractDataBaseSchema.GetTables(字符串目录,字符串schemaPattern,字符串tableNamePattern,字符串[]类型) 在NHibernate.Dialect.Schema.SQLiteDataBaseMetaData.GetTables(字符串目录,字符串schemaPattern,字符串tableNamePattern,字符串[]类型) 在NHibernate.Tool.hbm2ddl.DatabaseMetadata.GetTableMetadata(字符串名称,字符串模式,字符串目录,布尔值被引用) 在NHibernate.Cfg.Configuration.GenerateSchemaUpdateScript(方言方言,IDatabaseMetadata数据库元数据) 在NHibernate.Tool.hbm2ddl.SchemaUpdate.Execute(Action`1 scriptAction,布尔doUpdate)

有或没有任何架构更新——每当调用架构更新时都会发生。

此外,对于 System.Data.Sqlite 也可以正常工作 - 使用 Microsoft.Data.Sqlite - 异常即将到来

© www.soinside.com 2019 - 2024. All rights reserved.