如何使用NHibernate处理应用程序中的默认数据

时间:2010-11-04 16:16:00

标签: c# nhibernate

我正在开发一个使用SQL Server和NHibernate的应用程序。我们有需要为每个新实体创建的默认数据(复杂实体)的概念。可以基于每个用户更改此数据。但是,我们正在努力创建这些数据的最佳方式。

例如,假设我的应用程序有一个Store实体,当创建新Product时,我想创建几个默认Store个实体。每个Product的管理员都可以修改Store的任何内容。

我认为,有两个主要选择:

  1. 将默认数据保存在代码中,并在创建新实体后将其写入数据库。
  2. 保留数据库中的默认数据,并在创建实体时使用存储过程/原始SQL将其移出。
  3. 本能地,我倾向于选择二,因为数据库非常适合移动和操作数据集,而选项一需要大量凌乱的代码,这些代码可能会失控。

    但是,编写存储过程或原始SQL会出现问题:

    • 我们必须根据我们正在使用的数据库重新编写存储过程或SQL
    • 我们会以某种方式颠覆ORM(不确定这是否真的错了)。也就是说,我们将在不使用NHibernate的情况下移动数据

    我找到了Ayende Rahien撰写的this文章,其中概述了如何执行批量删除。我认为做类似的插入默认数据会很好。我还发现了一个nhibernate用户组帖子(称为“模式导出和默认数据” - SO不会让我发布两个链接)描述类似的情况,但似乎没有就什么是正确的解决方案达成共识是(虽然Ayende确实提供了一些反馈并建议数据存在于数据库中)。

    写完之后,我更倾向于使用存储过程,我只是担心混合两种数据库访问策略(直接调用SProcs和使用ORM)可能存在的陷阱。

    感谢任何反馈!

    修改:删除了“不可变”语言。我特别谈论可以改变的默认数据,所以我认为这个术语在这里是不正确/混淆的。

1 个答案:

答案 0 :(得分:1)

我将创建一个默认数据服务,在代码中创建这些数据,并使用工厂创建商店并使用默认数据服务生成默认实体。 使用存储过程肯定会破坏拥有ORM的程度。