NHibernate复合应用程序 - 模块的启动记录

时间:2011-07-28 07:01:40

标签: nhibernate fluent-nhibernate composite

我正在构建一个复合(Prism)WPF应用程序。我hava设法构建了一些核心元素:例如从文件夹中发现模块。 我也使用NHibernate(Fluent)来保存数据。我能够分离模块,因此每个模块都有自己的模型和映射,当Prism添加模块时,它也会为我的nh配置添加映射。

我想要做的是在启用一个从未启动过的模块时插入一些启动记录。 例如:

当我第一次启动我的应用程序时,它会检测到没有数据库并创建一个数据库,只有一个配置表。此表包含有关启用哪个模块的信息。然后管理员可以通过UI配置应该启用哪些模块的应用程序。下次应用程序启动时,它会检测新启用的模块中的新选项卡,并使用NH UpdateSchema创建其表。我想做的是也用这个表创建一些启动记录。 我认为这应该由NH事件(NH documentation on events)来完成。像'PostTableCreateEvent'这样的东西会很好但我找不到这样的东西。

你们有没有做过这样的事情?

1 个答案:

答案 0 :(得分:1)

事件在会话中被触发但是Schemaexport会占用会话事件或会话,所以你不能在那里挂钩。对于这个你想要的是xml映射中的<database-object><create>INSERT ...</create><drop></drop></database-object>或普通的sql,因为FNH不支持<database-object> afaik。

选项1:在创建NH-Configuration时添加fluent和hbm.xml映射,并使用<database-object>

嵌入映射

选项2:允许模块在创建表之后采取额外的步骤(sql)(对于我的一个项目,我在我自己的类/方法中包装了Schemaexport,它也创建了数据库本身,它不由schemaexport处理并插入自定义数据,如schemaversion和configs)