【发布时间】:2015-12-12 19:54:06
【问题描述】:
我使用 TPT 使用 EF Code First 开发了一个应用程序(发布附件、cmets 等)。它工作正常,并且正在与许多客户端进行 beta 测试。但是有许多层次结构。所以我有一个包含各种继承模型的基本模型,每个模型都包含许多属性,这些属性本身就是继承类型。
我注意到它非常慢,所以我查看了它生成的 SQL 并获得了一个帖子列表,EF 正在生成超过 2000 行 SQL。编译时间非常长,我不喜欢通过网络为每个请求发送这么多数据的想法。启动时获得 3 个帖子需要 5 秒。后续调用快很多,但是每次有recycle,速度又慢了。
我尝试过 Dapper 和手写代码,但问题是 Dapper 不适合需要依赖类型的多级查询;即 DisplayTemplates 和手写代码,虽然快速并不合适,因为它使未来的开发更加复杂。
我想尝试将一些代码(表)移动到 TPH 并考虑在违反第三规范和代码可维护性之间的权衡是可以接受的,但我找不到任何关于如何转换现有数据库的信息.
如果我从头开始,我只会删除 [Table...] 注释,但是我假设如果我使用填充的数据库执行此操作,我将丢失映射表中的所有数据并且它不会使用现有数据填充新的单个表。
这是正确的吗?是否有人知道如何将现有表从 TPT 转换为 TPH 或最佳实践。
我只有几个客户在试用,但如果我丢失了他们一半的数据,他们会不高兴的!!
【问题讨论】:
-
首先做你的实验来确认好处。然后尝试 EF 可以生成什么样的迁移可能会很有趣。最后总是有一个(蛮力)解决方案来保留数据,只需重命名新层次结构并复制内容。
标签: c# entity-framework ef-code-first