是否可以在 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 DataSetDataTable