在单一模型中将Code First和Database First结合起来?

ran*_*ons 8 entity-framework entity-framework-6

有没有办法在同一个上下文中结合代码优先和数据库优先?编辑EDMX文件时,我们遇到了大量的开发时性能问题(需要1.5分钟才能保存).我已经将我们的非插入/更新/删除UDF /存储过程移动到一些自动生成模型优先代码的自定义T4模板,但是OnModelCreating当涉及EDMX时我似乎无法调用.

我们考虑过的其他事情,但不会因某种原因而起作用:

  1. 我们不能(合理地)将我们的代码分离到多个上下文,因为我们的实体关系存在很多重叠.这似乎也是一个走过这条路线的人后悔.

  2. 我们尝试了两种不同的上下文,但实体和UDF之间存在相当多的连接.这可能是我们最后的希望,但我真的想避免它.

  3. 我们不能切换到Dapper,因为我们不幸地大量使用了IQueryable.

  4. 我们试图完全转向Code-First,但我们在EDMX中使用的功能不受支持(主要与插入/更新/删除存储过程映射有关).

ran*_*ons 0

感谢大家经过深思熟虑和彻底的回答。

许多其他答案都假设 EF Code-First 中的存储过程映射工作原理相同,但事实并非如此。我对此有点模糊,因为自从我查看它以来已经过去了大约 6 个月,但我相信从 EF 6.3 开始,代码优先存储过程要求您将实体中的每一列传递到插入/更新存储过程,并且您仅将关键列传递给您的删除过程。没有选项可以选择您可以传递哪些列。我们需要维护谁删除了记录,因此除了简单的密钥之外,我们还必须传递一些附加信息。

话虽如此,我最终所做的是使用 T4 模板从数据库自动生成 EDMX/Context/Model 文件(带有一些额外的元数据)。这将我们的开发时间体验从 1.5 分钟缩短到了大约 5 秒。

我希望 EF 存储过程映射能够得到改进,以实现对 EDMX 的模仿,然后我就可以通过代码生成代码优先映射并完全删除 EDMX 生成。


归档时间:

查看次数:

3286 次

最近记录:

8 年,9 月 前