我正在开发一个使用SQL Server和NHibernate的应用程序。我们有需要为每个新实体创建的默认数据(复杂实体)的概念。可以基于每个用户更改此数据。但是,我们正在努力创建这些数据的最佳方式。
例如,假设我的应用程序有一个Store
实体,当创建新Product
时,我想创建几个默认Store
个实体。每个Product
的管理员都可以修改Store
的任何内容。
我认为,有两个主要选择:
本能地,我倾向于选择二,因为数据库非常适合移动和操作数据集,而选项一需要大量凌乱的代码,这些代码可能会失控。
但是,编写存储过程或原始SQL会出现问题:
我找到了Ayende Rahien撰写的this文章,其中概述了如何执行批量删除。我认为做类似的插入默认数据会很好。我还发现了一个nhibernate用户组帖子(称为“模式导出和默认数据” - SO不会让我发布两个链接)描述类似的情况,但似乎没有就什么是正确的解决方案达成共识是(虽然Ayende确实提供了一些反馈并建议数据存在于数据库中)。
写完之后,我更倾向于使用存储过程,我只是担心混合两种数据库访问策略(直接调用SProcs和使用ORM)可能存在的陷阱。
感谢任何反馈!
修改:删除了“不可变”语言。我特别谈论可以改变的默认数据,所以我认为这个术语在这里是不正确/混淆的。
答案 0 :(得分:1)
我将创建一个默认数据服务,在代码中创建这些数据,并使用工厂创建商店并使用默认数据服务生成默认实体。 使用存储过程肯定会破坏拥有ORM的程度。