是否可以在 C# 中仅将 NHibernate 与数据集一起使用
Is it possible to use NHibernate with just Dataset in c#
抱歉,如果这是一个愚蠢的问题。是否可以在 C# 中将 NHibernate 与数据集一起使用?我的意思是我不打算拥有任何数据库,但会根据数据表或数据行触发的事件更新我的其他应用程序。我想对这些数据集表进行休眠映射,并希望对事件处理程序使用静态实现。因此,可以在具有多个事件处理程序的单个静态 class 中跟踪对数据集的所有更改。所以除了我对其他应用程序的更新,我想使用 NHibernate。
我认为您的问题可能需要进一步澄清以添加更多详细信息,但我只会给出我的想法。
基础知识
基本上 NHibernate 是一个对象关系映射器,也就是说,它将您的持久性模型映射到(无论您选择什么数据库)表和它的字段,反之亦然。
您真正想要的是没有 NHibernate 支持的数据库,而是更改此行为以使用 DataTables/DataRows。这可以通过 巨大的 黑客和管道来完成,但如果我是你,我会尽量避免这种情况。
一种方法
最简单的方法是使用基于文件或内存中的持久性表示,例如 SQLite 或 SQL Server Express。我使用内存中的 SQLite 进行 NHibernate 持久性单元测试。
您可能需要配置 NHibernate(使用 FluentNHibernate)以使用 SQLite 数据库作为:
ISessionFactory _sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory().ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssembly(assemblyContainingMappedType))
//.Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(assemblyContainingMappedType)))
.ExposeConfiguration(cfg => _configuration = cfg)
#if DEBUG
.Diagnostics(d => d.Enable())
.Diagnostics(d => d.OutputToConsole())
#endif
.BuildSessionFactory();
这样你就有了一个 ISessionFactory
实例。现在通过使用您的 Fluent 映射只需执行:
ISession _session = _sessionFactory.OpenSession();
new SchemaExport(_configuration).Execute(true, true, false, _session.Connection, Console.Out);
现在您有了内存中的 SQLite up 和 运行。您唯一需要实现的是使用 NHibernate 的 ISession
(例如:_session.Save()
)来处理数据库并让您的存储库或查询 return DataSet
或 DataTable
。
抱歉,如果这是一个愚蠢的问题。是否可以在 C# 中将 NHibernate 与数据集一起使用?我的意思是我不打算拥有任何数据库,但会根据数据表或数据行触发的事件更新我的其他应用程序。我想对这些数据集表进行休眠映射,并希望对事件处理程序使用静态实现。因此,可以在具有多个事件处理程序的单个静态 class 中跟踪对数据集的所有更改。所以除了我对其他应用程序的更新,我想使用 NHibernate。
我认为您的问题可能需要进一步澄清以添加更多详细信息,但我只会给出我的想法。
基础知识
基本上 NHibernate 是一个对象关系映射器,也就是说,它将您的持久性模型映射到(无论您选择什么数据库)表和它的字段,反之亦然。
您真正想要的是没有 NHibernate 支持的数据库,而是更改此行为以使用 DataTables/DataRows。这可以通过 巨大的 黑客和管道来完成,但如果我是你,我会尽量避免这种情况。
一种方法
最简单的方法是使用基于文件或内存中的持久性表示,例如 SQLite 或 SQL Server Express。我使用内存中的 SQLite 进行 NHibernate 持久性单元测试。
您可能需要配置 NHibernate(使用 FluentNHibernate)以使用 SQLite 数据库作为:
ISessionFactory _sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory().ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssembly(assemblyContainingMappedType))
//.Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(assemblyContainingMappedType)))
.ExposeConfiguration(cfg => _configuration = cfg)
#if DEBUG
.Diagnostics(d => d.Enable())
.Diagnostics(d => d.OutputToConsole())
#endif
.BuildSessionFactory();
这样你就有了一个 ISessionFactory
实例。现在通过使用您的 Fluent 映射只需执行:
ISession _session = _sessionFactory.OpenSession();
new SchemaExport(_configuration).Execute(true, true, false, _session.Connection, Console.Out);
现在您有了内存中的 SQLite up 和 运行。您唯一需要实现的是使用 NHibernate 的 ISession
(例如:_session.Save()
)来处理数据库并让您的存储库或查询 return DataSet
或 DataTable
。