实体框架 - 比较项目

时间:2015-03-29 08:43:17

标签: c# sql-server database entity-framework comparison

我目前有点陷入困境,需要就如何继续提出一些建议。我有以下设置:

  • 两个数据库,一个是Ingres,另一个是MSSQL
  • 我从Ingres数据库获取一部分数据(这是一个烂摊子),将其带入(更多)规范化表单并将其存储在MSSQL数据库中以供进一步使用。
  • 我通过普通的DataReader从Ingres DB获取数据项,并使用Entity Framework将项目存储在MSSQL数据库中
  • 到目前为止,这基本上有效(jey!)

数据库模型(在MSSQL DB中)由5个表组成,而一个表是主表(Articles),其他表(Price,Batches,...)与该表相关(主要通过文章编号)这是一个主键。)

现在我们谈论的是35k篇文章,其中每篇文章都有很多批次,等等。当我每次更新完整表时,这已成为一个问题(基本上我所做的是我TRUNCATE表并重新创建整个数据集)。这需要(在非常慢的服务器上)约。 5-10分钟(甚至在对Entity Framework默认值进行一些修改之后)。 由于数据集必须一致,因此该表基本上是在该时间范围内锁定的,这是一个不可行的。

我想切换到一种连续更新方法,在后台连续执行数据的检查和修改。

基本上我能想到的唯一想法是手动检查所有项目并检查项目的任何属性是否已更改。如果它(或者如果它是新的)我会手动修改属性。

你们中的任何人都知道如何处理这个问题的更好方法吗?执行此比较的最佳方法是什么,因为我想将每篇文章(及其所有依赖项)与其他数据库中的文章进行比较。有一些自动化方法吗?

1 个答案:

答案 0 :(得分:0)

如果Ingres支持触发器,则将触发器放在ingres表上,这些表将新值写入新表(每个原始表一个),同时在更改表上放置一个标志,以指示它是插入,更新还是删除。在更改表中也包括时间戳。

然后在适当(或连续)的任何时间间隔,从更改表中读取每个更改并将其应用于MSSQL表,然后删除更改行。

它可能会比这复杂一点,但这种基本技术对我来说似乎是一个很好的方法。