C# Winforms,迁移到NHibernate

3
我们目前正在开发一个新的WinForms应用程序(C# .NET 3.5)。
该项目目前已完成40%,但我们花费了大量时间编写DAL实现(CRUD)。我们现在想将NHibernate作为ORM解决方案,以利用其许多优点并减轻一些DAL编码工作。
我们更愿意集中精力解决业务问题。
当前计划迁移到NHibernate和FluentHibernate,但有一些问题。
1.从性能角度来看,你认为NHibernate是否比继续编写自己的代码更明智?对于陡峭的学习曲线,NHibernate的变化值得吗?
2.我们目前采用“软删除”并通过数据库中的视图读取数据,其中有一个字段“Deleted = null”(Deleted是TIMESTAMP)。据我所知,当我们映射每个类时,还可以指定“Where”子句,这意味着我们不再需要任何“过滤”视图来查看我们的数据库。是这样的吗?
3.关于上面的问题。我们还拥有一个“Purge”功能,可以从数据库中删除记录。我们能够使用“软删除”并仍然拥有清除功能吗?
4.我们能够通过NHibernate将BLOB持久化到数据库中吗?
5.对于我们来说,最好的迁移策略是什么?如何开始进行NHibernate迁移,记住该应用程序尚未发布,我们可以更改数据库结构。理想情况下,我认为将映射每个业务对象,然后让NHibernate为我们生成模式,这听起来像一个好主意吗?
6.NHibernate能够处理查找数据吗?我们目前将查找数据读入全局字典,我们在应用程序的生命周期内使用它。我们仍然可以使用NHibernate进行此操作吗?
如果有些问题很基础,请见谅,我仍在努力掌握NHibernate。
1个回答

3

以下是回答您问题的内容,参考原始问题编号:

  1. 学习使用 NHibernate 绝对是值得的 - 我在我的现任工作中使用了它,我们从未后悔。《NHibernate 实战》是一个很好的入门书籍。

  2. 你可以将 "Where" 子句作为映射的一部分轻松包含进去。我们用它来过滤一些常用表和视图的 NHibernate 映射。

  3. 对于清除数据的功能,只需添加一个反转 Where 子句的二级映射(或者没有标志过滤的映射),你就会大功告成(有时我们针对相同的实体有几个映射来进行数据整形)。

  4. 关于 Blob 等等方面的问题,这里有一篇由 Ayende 写的文章,以及一篇关于 Calyptus 的文章。

  5. 迁移可能是一个更大的问题 - 我们个人使用仓储模式,带有仓库接口(用于单元测试和模拟),仓库的具体实现和我们的模型(POCOs)。我们没有将任何与 NHibernate 相关的代码放在我们的仓库之外,以减少依赖性并帮助测试。
    再次强调,《NHibernate 实战》是了解该产品的绝佳信息来源,还可以看看 NHForge.orgTekPub 的 NHibernate 系列等等(我甚至在我的个人资料中链接了我的博客上的一些教程)。

  6. 对于查找数据,NHibernate 可以很好地工作,并且还支持缓存。


无论你选择哪个ORM(我会选择NHibernate),你都将节省大量时间,并且会一直想知道为什么要花那么多时间在数据访问代码上 ;) - Bob Palmer
谢谢Bob。你刚刚再次确认了我过去几天一直在阅读的内容。这将是一个陡峭的学习曲线,但我希望它会非常值得。感谢您抽出时间来组织这样一个好的回复。 - Josata
很高兴能够帮助!如果你遇到任何问题,请随时联系我。我非常乐意帮助大家学习这方面的知识。 - Bob Palmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接