我们公司多年来一直在使用 Telerik Open Access。我们有多个项目在使用它,包括一些正在开发中的项目和一些需要更新的生产项目。由于 Telerik 不再更新或支持 Open Access,我们遇到了各种问题。我们有用户不得不去另一个工作站,因为我们无法在他们的计算机上获得 Open Access,我们有一些项目我们无法添加或更新表,因为视觉设计器在现代 Visual 中不起作用工作室版本。所以我的问题是,我们如何转换这些以及我们将这些转换为什么?
我听说过 Microsoft Entities Framework,我们过去只是调用存储过程,而不是拥有单独的数据项目。显然,我们的客户不会支付我们几个小时的转换费用,所以我们需要一些快速有效的东西。我们如何将现有的 Telerik Open Access 项目转换为 Microsoft Entities Framework、直接 SQL 查询或其他一些数据层选项?
这是我们目前拥有的示例。
一个单独的 Visual Studio 项目,充当我们的数据层,其中所有代码都是由 Telerik Open Access 的可视化设计器创建的:
然后我们在主项目中有一个 DataAccess.cs 类,用于创建数据层的实例:
然后我们在主项目中通过使用 linq 语句来调用它:
最佳答案
我不懂 OA 实践,所以我只能投入我的 2 美分。
恐怕这不会是一个轻松的过渡。我还没有看到从一个数据层实现到另一个实现的第一次无缝转换(我已经看到了一些)。造成这种情况的主要原因是 IQueryable
是 leaky abstraction 。即数据层暴露了 IQueryable
,但是
这意味着,如果您要将数据层移植到 EF,您可能会注意到某些 LINQ 查询会抛出运行时错误,因为它们包含不受支持的 .Net 方法/属性(例如
DateTime.Date
),或者性能更差——或更好,或者以细微不同的形状或排序顺序返回数据。EF 中缺少的一些重要 OA 功能:
另一方面,OA 和 EF 的基本架构似乎并没有太大区别。他们俩 -
IQueryable<T>
支持 LINQ,其中 T
是一个实体类。 总而言之,这将是一个微妙的转换、尝试和测试过程。一件好事是您当前的 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/