使用Fluent NHibernate进行模式版本控制

时间:2011-11-08 18:39:54

标签: nhibernate fluent-nhibernate schema

我已经尝试过阅读一些以前的答案,但目前尚不清楚它们是否适用于我的情况,据我所见。大多数问题似乎都涉及Web应用程序。我认为我最好说明我的要求并从那里开始,而不是试图反向设计针对不同情况的建议。我基本上问了两个问题:

  • (流利的)NHibernate支持原则上允许我实现这些要求是什么?如果可能,我更愿意使用Fluent API;
  • 我必须自己编写一份工作解决方案?

概括地说,要求如下:

  • 我想要做的是使用FNH来持久化和重新水化桌面应用程序的模型,这些应用程序与MS Office具有大致相同的使用模式 - 也就是说,工作保存为自包含文件加载到应用程序的本地实例中。
  • 当前版本的应用程序必须能够导入 所有以前版本的文件,并保留除了向用户声明的信息之外的所有信息不被支持;通过'import'我的意思是'将文件A中包含的模型信息转录到新文件B中,使得文件B与当前版本完全兼容,除了声明不支持的版本。'
  • 当前版本的应用程序必须能够导出当前模型,才能仅符合应用程序之前主要版本的最新版本。它不需要提供与以前主要版本的任何旧版本的旧版兼容性。
  • 产品的性质使得文件格式的更新发生得相当频繁 - 旨在能够每六个月左右向用户发布一次,如果有必要作为一个大概的数字,并且在开发中更改频率高于这一点。

我不反对编写代码来处理这个问题,只要:

  • 对于模式的任意复杂更改,编码不会花费过多的时间;
  • 我可以通过单元测试调用FNH API来验证版本之间的转换是否完整;
  • 我可以验证任何给定的模型是否会在版本之间正确往返,并且只会丢失向用户声明的产品版本之间不支持的数据;

所以,总结一下:

  • Fluent NHibernate提供什么(如果有的话)来启用这种用例?
  • 这些要求是否可以轻易满足,或者我是否必须使它们更具体和受限制?
  • 我应该如何调查自己编码?

1 个答案:

答案 0 :(得分:2)

我建议您使用文档数据库,例如RavenDB,MongoDb等,以实现您的目标。我认为这些比试图强制使用RDBMS(sql server,oracle等)更合适,因此nHibernate可以做一些不那么擅长的事情。不是说它不能,但你最终会跳过所有类型的篮球来完成你的要求。

有一点需要注意的是,Fluent Nhibernate只将Fluent API放在nhibernate的类映射上。