【发布时间】:2020-04-22 18:33:53
【问题描述】:
我正在构建一个用于插入数据的 .NET 应用程序(实际上是一个 Excel 插件),并且我想使用 ORM 来插入数据自动版本控制。
这是一个有效的例子:
- 用户“John Doe”进行了第一次数据插入(4 个数据点,如下例所示)
- 稍后,用户“Albert”打开界面,修改一个数据点,保存
- 处理所有 4 个数据点; ORM 将修改后的数据标记为非当前数据,添加新数据,更新版本计数器,更改有效日期列
我正在寻找一个能够自动处理版本控制的 ORM 框架。 下面,第二次插入后的数据库表。 熟悉 DB 模式的人会认为这是“缓慢变化的维度 (SCD) 类型 2”
数据不会通过 ORM 访问,而是通过各种 SQL 查询访问,因此 valid_from/valid_to 列是必不可少的。 我也知道这可以通过数据库触发器来完成,但我想要一个不管后端如何都能工作的解决方案......
【问题讨论】:
-
这通常是一个数据仓库概念。填充此表是否不是 ETL 过程的一部分,通常不执行 bij ORM?
-
这更像是带有版本控制/更改跟踪的 CRUD 输入情况。 ETL 对此有大量的库,但您不能真正将 SSIS/Talend/Pentaho 与 .NET 上下文集成。我看不出最流行的 .NET ORM 怎么没有这个功能?
-
所以,要么你想让我们为你提供一个库的链接(离题),要么答案是“坐下来开始编程,然后回来问你什么时候尝试过 - 没有尝试,也跑题了。这是一个边缘要求 - 所以不在标准工具中。大多数人会使用触发器或数据库手段(即 SQL Server 具有现在作为数据库核心功能完全执行此操作的临时表)。而且 ORM 非常糟糕满足大多数 ETL 需求的解决方案 - 抱歉。除非数据量很小,否则性能会很差。
-
我知道数据库触发器 - 这不是这里的解决方案,因为我正在寻找一个与数据库无关的解决方案。也知道 SQL-Server 时态表,但同样,我希望该项目是 SQL 方言中立的。这是一个 Excel 加载项,而不是 ETL 项目(根据描述),因此数据工作流会很小,并且性能不是问题。重新做我的工作,我做了一个基于动态 SQL 合并语句的解决方法,但这显然不是我正在寻找的通用解决方案......
标签: .net entity-framework nhibernate orm scd