.net 实现版本历史记录功能

.net 实现版本历史记录功能,.net,architecture,.net,Architecture,我们正在ERP应用程序Winforms/WCF中实现版本历史记录功能,我们正在寻找最佳的方法,到目前为止,我们提出了两种解决方案: 1将对象状态保存为数据库中的二进制文件 2保存对象的属性名称和值,并在以后获取时重新构建 还是有更好的方法?请帮忙。提前感谢。我取决于您是如何持久化的,但post描述了代码中历史实体的显式建模。基本上,您最终会得到一个单独的历史实体。他们正在使用NHibernate,但我认为如果您自己编写数据库代码,同样的事情也会适用 另一种方法是,将系统上发生的每个操作记录为事件

我们正在ERP应用程序Winforms/WCF中实现版本历史记录功能,我们正在寻找最佳的方法,到目前为止,我们提出了两种解决方案:

1将对象状态保存为数据库中的二进制文件 2保存对象的属性名称和值,并在以后获取时重新构建


还是有更好的方法?请帮忙。提前感谢。

我取决于您是如何持久化的,但post描述了代码中历史实体的显式建模。基本上,您最终会得到一个单独的历史实体。他们正在使用NHibernate,但我认为如果您自己编写数据库代码,同样的事情也会适用


另一种方法是,将系统上发生的每个操作记录为事件。因此,您有一个记录,记录您感兴趣的实体发生的每一次更改。但是,除非您从一开始就以这种方式工作,否则我怀疑仅在版本历史记录中实现它是否值得。

@Lasse V.Karlsen,现在我们正在使用POCO来持久化对象。我们没有使用任何ORM

@Grant Crofton,看看你提到的解决方案,我认为第一种方法对我们来说更实用。我们计划将任何实体产品、采购订单、销售订单等的版本历史保存到一个中心表中

由于我们没有使用ORM,我们正在探讨如何将其保存在DB上:

我们是否将版本实体设置为流并将其保存在数据库中?这是个好主意吗?这将使我们的事情变得更容易

还是将对象的每个属性名及其对应值保存到数据库中?这样,每当我们需要一个实体的版本时,我们只需提取与对象相关的每个属性和值,并通过代码重建对象,我希望我不会让你对此感到困惑


我很抱歉没有直接回答您的每个问题,这是一个匿名帐户,似乎我无法以我之前使用的帐户登录。

如果我们忽略对象的过去历史记录,您今天是如何坚持的?这取决于您想如何处理它们,但我无法想象保存流会工作得太好——您无法通过SQL访问属性,因此您必须从数据库加载所有实体,对它们进行反序列化,并使用代码查看它们以查找任何内容。我发布的链接将历史的每个版本保存为一个单独的记录,因此您将得到一个已更改对象的大量历史记录,每个记录可能有一个或两个差异。占用大量空间,但灵活且易于实现,而且这些天空间通常不是什么大问题。谢谢。我担心如果我们将其保存为流,是否会影响性能。如果我们将实体保存为记录,那么我们将遇到另一个挑战:如何保存作为集合的实体的属性?例如,如何保存产品的供应商属性列表?至少是正确的方法。