我们公司多年来一直在使用 Telerik Open Access。我们有多个项目在使用它,包括一些正在开发中的项目和一些需要更新的生产项目。由于 Telerik 不再更新或支持 Open Access,我们遇到了各种问题。我们有用户不得不去另一个工作站,因为我们无法在他们的计算机上获得 Open Access,我们有一些项目我们无法添加或更新表,因为视觉设计器在现代 Visual 中不起作用工作室版本。所以我的问题是,我们如何转换这些以及我们将这些转换为什么?

我听说过 Microsoft Entities Framework,我们过去只是调用存储过程,而不是拥有单独的数据项目。显然,我们的客户不会支付我们几个小时的转换费用,所以我们需要一些快速有效的东西。我们如何将现有的 Telerik Open Access 项目转换为 Microsoft Entities Framework、直接 SQL 查询或其他一些数据层选项?

这是我们目前拥有的示例。

一个单独的 Visual Studio 项目,充当我们的数据层,其中所有代码都是由 Telerik Open Access 的可视化设计器创建的:

entity-framework - 我们如何从 Telerik Open Access 切换到其他任何东西?-LMLPHP

然后我们在主项目中有一个 DataAccess.cs 类,用于创建数据层的实例:

entity-framework - 我们如何从 Telerik Open Access 切换到其他任何东西?-LMLPHP

然后我们在主项目中通过使用 linq 语句来调用它:

entity-framework - 我们如何从 Telerik Open Access 切换到其他任何东西?-LMLPHP

最佳答案

我不懂 OA 实践,所以我只能投入我的 2 美分。

恐怕这不会是一个轻松的过渡。我还没有看到从一个数据层实现到另一个实现的第一次无缝转换(我已经看到了一些)。造成这种情况的主要原因是 IQueryableleaky abstraction 。即数据层暴露了 IQueryable ,但是

  • 它不支持界面的所有功能,并且
  • 它添加了自己的功能,而
  • 它对如何实现支持的功能有自己的解释。

  • 这意味着,如果您要将数据层移植到 EF,您可能会注意到某些 LINQ 查询会抛出运行时错误,因为它们包含不受支持的 .Net 方法/属性(例如 DateTime.Date ),或者性能更差——或更好,或者以细微不同的形状或排序顺序返回数据。

    EF 中缺少的一些重要 OA 功能:
  • 运行时映射(EF 的映射是静态的)
  • 批量更新/删除函数(使用 EF:仅通过使用第三方库)
  • 二级缓存
  • 分析器和调优顾问
  • 大对象流
  • 混合数据库端和客户端对 LINQ 查询的评估(EF6:仅 db-evaluation)

  • 另一方面,OA 和 EF 的基本架构似乎并没有太大区别。他们俩 -
  • 支持 POCO
  • 使用简单的导航属性
  • 有一个流畅的映射 API
  • 通过 IQueryable<T> 支持 LINQ,其中 T 是一个实体类。
  • 最重要的是:两者都围绕着工作单元和存储库模式。 (对于 EF:分别为 DbContext 和 DbSet)

  • 总而言之,这将是一个微妙的转换、尝试和测试过程。一件好事是您当前的 DAL 已经在一定程度上被抽象了。另一个是语法看起来甚至没有太大不同。你在哪里...
    dbContext.Add(newDockReport);
    dbContext.SaveChanges();
    

    ...使用EF这将成为...
    dbContext.DockReports.Add(newDockReport);
    dbContext.SaveChanges();
    

    使用 EF-core,它甚至不需要改变一点。

    但这是另一个重要的选择: EF6 还是 EF-core ? EF6 稳定、成熟、功能丰富,但处于生命周期的尽头(您现在可能会讨厌这个词)。另一方面,EF-core 是 future ,但目前正在努力使其主要功能没有错误,还没有 EF6 那样丰富的功能(并且一些功能将永远不会回来,尽管其他新功能是很大的改进与 EF6 相比)。目前,我对将 EF-core 用于企业应用程序持谨慎态度,但我很确定一年后这不再是问题。

    无论您采用哪种方式,我都会通过编写大量集成测试来开始这个过程,如果您还没有这样做的话。集成测试的优点是您可以避免首先模拟任一框架的麻烦(这不是微不足道的)。

    关于entity-framework - 我们如何从 Telerik Open Access 切换到其他任何东西?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41750927/

    10-12 00:17
    查看更多