我们目前正在开发一个新的WinForms应用程序(C#.NET 3.5)。
该项目目前已完成40%,但我们花了相当多的时间编写DAL实现(CRUD)。我们现在想要将NHibernate作为一个ORM解决方案来利用它的许多好处并减轻一些DAL编码工作。
我们更愿意集中精力解决业务问题。
目前我们计划迁移到NHibernate和FluentHibernate,但有一些问题。
对NHibernate的改变是否值得陡峭的学习曲线?从性能的角度来看,你认为NHibernate比继续写自己更合理吗?
我们目前使用“软删除”并通过数据库中具有“Deleted = null”字段的视图读取数据(Deleted是TIMESTAMP)。根据我的理解,当我们映射每个类时,我们还可以指定一个“Where”子句,这意味着我们的数据库中不再需要任何“过滤”视图?这是对的吗?
关于上述问题。我们还有一个“清除”功能,可以从数据库中删除记录。我们可以使用“软删除”并仍然具有清除功能吗?
我们可以通过NHibernate将BLOBS持久化到数据库吗?
对我们来说最好的迁移策略是什么?您将如何开始NHibernate迁移,请记住该应用程序尚未发布,我们可以更改数据库结构。理想情况下,我正在考虑映射每个业务对象,然后让NHibernate为我们生成架构,听起来这是一个好方法吗?
NHibernate可以使用Lookup数据吗?我们目前将查找数据读入我们在应用程序生命周期中使用的全局字典中。我们还能用NHibernate做到这一点。
道歉,如果其中一些问题是基本的,我仍然试图处理NHibernate。
答案 0 :(得分:3)
(以下问题的答案,引用原始问题编号)
去NHibernate绝对值得学习曲线 - 在我目前的工作中做到了,我们从未回头。 NHibernate in action是一本很好的书。
您可以轻松地在地图中添加“Where”子句。我们使用它来过滤NHibernate映射中的一些常用表和视图。
对于你的清除功能,只需添加一个反转where子句的辅助映射(或没有过滤标志的辅助映射),你就是黄金(我们有时会有几个映射到相同的实体进行数据整形)。 / p>
迁移可能是一个更大的问题 - 就个人而言,我们使用存储库模式,其中包含存储库的接口(用于单元测试和模拟),存储库的具体实现以及我们的模型(POCO)。我们不会在我们的存储库之外的任何地方保留任何NHibernate特定代码,以减少依赖性等,并有助于测试 再次,看看NHibernate在行动中获取有关该产品的一些重要信息,以及NHForge.org,TekPub用于他们的NHibernate系列等等。(我甚至在我的博客上有一些教程,链接在我的个人资料中)。
对于查找数据,NHibernate工作正常,并且还支持缓存。