是否有可能在c#中只使用数据集的NHibernate

时间:2017-03-31 01:04:59

标签: c#-4.0 nhibernate dataset nhibernate-mapping fluent-nhibernate-mapping

对不起,如果这是一个愚蠢的问题。是否可以在c#中使用NHibernate和Dataset?我的意思是我不打算拥有任何数据库,但会在通过数据表或数据行触发事件时更新我的​​其他应用程序。我希望对这些数据集表进行hibernate映射,并希望对事件处理程序使用静态实现。因此,可以在具有多个事件处理程序的单个静态类中跟踪对数据集的所有更改。所以除了我对其他应用程序的更新之外,我想使用NHibernate。

1 个答案:

答案 0 :(得分:3)

我认为你的问题可能需要更多的澄清才能添加更多详细信息,但我只是想一想。

基本

基本上NHibernate是一个对象关系映射器,也就是说,它将持久性模型映射到(无论你选择的数据库是什么)表和它的字段,反之亦然。

你真正想要的是没有NHibernate支持的数据库,而是改变这种行为以使用DataTables / DataRows。这可以通过巨大的黑客和管道来完成,但如果我是你,我会尽力从中拯救自己。

一种方法

通过使用基于文件或内存中的持久性represantation,这是最简单的方法,例如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。您需要实现的唯一方法是使用NHibernate的ISession(例如:_session.Save())来处理数据库并让您的存储库或查询返回DataSet或{ {1}}。