需要建议迁移asp.net mvc 3应用程序的几个模块:现在我们正在使用EF和POCO类,但是在将来对于一些性能驱动的模块我们需要转移到ADO.NET或其他一些ORM工具(可能是DAPPER 。净)。

我们现在面临的问题是:我们的视图依赖于通过EF加载的Collection类,我应该使用什么策略来加载这些实体类与EF与其他ADO.NET或ORM工具完全相同的方式。

我想要的是能够在数据访问层以最小的变化在EF和ADO.NET之间切换,因为我不希望我的视图通过它来实现。

一般承认的答案

您应该使用存储库设计模式来隐藏数据访问层的实现。无论您使用何种数据访问层,存储库都将返回相同的POCO并具有相同的操作合同。现在,如果您使用的是没有虚拟方法来实现延迟加载的真实POCO,这样可以正常工作。您需要显式处理对实体的依赖集合的加载以使其工作。


热门答案

到目前为止我所看到的,从一个ORM / DAL到另一个ORM / DAL的无缝过渡是一种错觉。凯文建议的存储库模式是一个很好的帮助,甚至是先决条件(+1)。但是,每个ORM在域层中都有足迹。使用EF,您可能会使用虚拟属性,可能是数据注释,或者很容易忘记,一个易于适应的验证框架(并且忽略其他没有的验证框架)。您可以依赖EF在连接表之间进行映射的能力。由于EF,可能有些事情你不愿意 (但想做)。

(更不用说在EF上下文中执行脚手架的工具。这会使锁定更加紧密。)

在你的情况下我可能会做的一些事情(如果我为你陈述明显的话,请原谅我)

  • 最佳使用EF。 (最佳映射,最佳关联,......)为未来做好准备是好的,但它很容易退化为YAGNI模式。
  • 精通linq + EF:有很多方法可以通过EF不必要地杀死性能。假设EF足够好!
  • 继续寻找高性能的替代方案,例如使用存储过程,并行化,后台处理和/或减少数据量,并在需求(功能和非功能)足够清晰时选择一个。
  • 也许引入一个带有DTO的抽象层,它现在可以提供你的观点,并且将来可以很容易地被另一个ORM或ADO实现。
  • 将POCO作为接口公开,稍后可以由其他对象实现。


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因