3

我有一个带有现有数据库的项目,该数据库最初是为遗留应用程序创建的。它工作正常,但随着时间的推移,相当多的表/字段已经丢失或未充分利用,但历史数据可能有朝一日有用,所以它们不会去任何地方。

进入 2012 ('13) 和 Entity Framework 5,这是一个内置 POCO 生成的 ORM(不错的添加!)。太棒了.. 连接到 Oracle 数据库,gen。了解上下文和一些 POCO 的.. suh-weet !但是等等..我的 POCO 并不是我想要处理的 POCO ......有一堆我不再需要的字段(不是说我永远不需要它们,但我不能确定),所以现在我有了这些 POCO,它们基本上是臃肿的表映射器......那我该怎么办。

我在这里看到一些解决方案..

1)。我可以把它们扔掉,只使用我需要的字段。

2)。我可以进入模型表面并开始删除未使用的字段。

3)。“代码优先”方法并将对象绑定到现有数据库中,但它是一个大型数据库(我很确定这是可能的,对吧?)

4)。在它自己的模型项目中创建我自己的 POCO / DTO,这些将基本上成为我的“域模型”,但是映射回上下文可能会很痛苦..

最后,这些 POCO / DTO 是否需要在他们自己的项目中?真的有什么好处……看到像“YAGNI”这样的东西,我觉得它可以坐在.edmx下面,从不打扰任何人..

附带说明一下,我也将需要其中一些通过 JSON,因此需要考虑整个可序列化能力。

我可以只对生成的 POCO 进行部分分类,而只对我需要的属性进行“属性”吗?

无论如何,很高兴听到过去的经验或对此事的想法..

我可以在Programmers中看到它,但我想我会从这里开始。

4

1 回答 1

1

我们有一个非常相似的情况,一个大型的遗留 DB2 数据库,我们需要一小部分特定表用于我们的应用程序。

为此,我们对我们感兴趣的相关数据子部分使用实体框架代码优先模型。这意味着我们可以做一些重要的事情:

  • 从模型中删除不相关的数据,使代码更容易被发现
  • 重命名我们模型中的字段并将它们映射到在应用程序中有意义的名称而不是现有的列名称
  • 减少查询拉回的数据量(即我们的选择不会抓取所有额外的位)
  • 存在 2 种数据格式的地方使用现代标准而不是历史格式

这对我们来说非常有效,但有几点需要注意:

  • 如果您正在写作,请确保在模型中包含所有必填字段
  • 你可以生成你的 CF 类,但你必须稍微修剪一下
  • 从非 mssql 生成有时会更棘手

在 json 序列化方面,我们也这样做,但是我们为此使用不同的模型并使用 automapper 进行翻译。在大多数情况下,您应该能够在不需要添加额外属性的情况下进行序列化,但如果需要它们,您可以将它们与任何 ef 属性一起添加到您的 pocos 中。

于 2013-01-10T22:44:47.817 回答