【问题标题】:Entity Framework with existing database and classes with multiple sources vs manual stored procedures具有现有数据库和具有多个源的类的实体框架与手动存储过程
【发布时间】:2016-03-20 05:38:35
【问题描述】:

Entity Framework 和 ORM 的新手,但可能有一个独特的情况,我们正在考虑重构我们的应用程序的工作方式。

现在我们正在使用内存中分布式缓存架构,基本上作为内存数据库,效率相当低且容易出错,因此与持久数据的同步,甚至缓存中的对象都不一致。

我们的想法是回到核心,要么集成某种形式的 ORM,如实体框架,要么在 SQL 中手动创建存储过程,以引入创建复杂类所需的数据。

例如,假设我们有一个 SomeDashboard 类,它将具有许多基于请求的 Dashboard 设置的属性(存储在 SQL 中),但随后有许多与 @ 相关的对象列表987654323@,例如Products 或Reviews 等。可以编写一个存储过程,该过程将利用单个数据库请求,该请求将拉回多个结果集以创建所有这些列表和对象值。

最好是创建存储过程来执行此操作,还是创建多个存储过程来分段获取数据(意味着更多的 SQL 调用),或者搭载 Entity Framework 来对所有对象在一起?

一些不稳定的东西,导致需要经常重建;每次我们构建对象时,担心数据库的扩展需要如此多的连接和如此多的请求。

也许这足以给出某种形式的方向;我知道它充其量是模糊的。

与实体框架相关的问题的另一部分是——将所有内容映射到现有数据库和类有多难?

从高层次上看……感觉内存分布式缓存的集成并没有经过深思熟虑,并且以“抢先优化”的方式完成,导致问题多于解决;所以回到根源并大量使用 SQL,然后在可能需要的地方有选择地集成缓存,当 SQL 的性能成为问题时似乎是最好的主意。

【问题讨论】:

    标签: c# sql .net entity-framework ncache


    【解决方案1】:

    关于你问题的第一部分,你应该在实体框架上使用eager loading,让它为你查询数据。这是使用 OR/M 的目的:您专注于应用程序代码,而 OR/M 负责读取和写入数据到 SQL 数据源的原始部分。

    查看这篇 MSDN 文章:Loading Related Entities。

    关于...

    与实体框架相关的问题的另一部分是 -- 将所有内容映射到现有数据库和类有多难

    这没有确定的答案。这可能取决于您的数据库设计。如果您的数据库是使用良好的关系设计实践构建的,那么通常针对该数据库配置 OR/M 会更容易。

    【讨论】:

    • 谢谢。那篇文章让 EF 看起来比我想象的还要棒。所以一旦配置,它对交互是透明的;只与类和 List 对象交互,它会相应地正确映射到数据存储设备吗?是否有一种映射工具可用于轻松地将数据库映射到类,反之亦然,而无需使用为您生成数据库或类的模板化方法之一?
    • @Sivart OR/Ms 旨在将对象图(分层)映射到关系数据(非分层)。由于在保持良好的面向对象编程的同时使用关系数据库很痛苦,因此 OR/M 开始将大量代码自动化,而在它们之前是应用程序代码。现在只是一个黑盒层,您完全依赖于您在任何其他抽象层上的操作方式。
    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 2019-04-17
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多