gpt4 book ai didi

linq-to-sql - 使用 Linq-to-SQL、IOC 和存储库模式预取数据

转载 作者:行者123 更新时间:2023-12-04 02:40:12 24 4
gpt4 key购买 nike

我想使用 Linq-to-SQL 预取一些数据。

1) 常见的解决方案是处理DataLoadOptions,但在我的架构中它不起作用,因为:

  • 必须在第一次查询之前设置选项
  • 我正在使用 IOC,所以我不直接实例化 DataContext(我无法在实例化时执行代码)
  • 我的 DataContext 在网络请求期间保持不变

2) 我看到了另一种可能性,它基于方法中的加载 数据及其子项,然后仅返回数据(因此子项已加载)see an example here

尽管如此,在我的架构中,它不能不工作:

  • 我的查询从我的存储库中级联出来,可以被许多将添加子句的服务使用
  • 我使用接口(interface),linq-to-sql 对象的具体实例不会离开存储库(是的,您可以使用接口(interface)并添加子句)
  • 我的存储库是通用的

是的,这个架构非常复杂,但它非常酷,因为我可以像乐高一样玩代码;)

我的问题是:预取数据的其他可能性是什么?

最佳答案

在我的应用程序中,我可能使用了您可能的解决方案 #2 的变体。这有点难以解释,但很简单:我在我的模型中使用自定义链接和延迟延迟加载 lazy classes以便从我利用 IQueryable 的特定于 LinqToSql 的差异执行中抽象出来。好处:

  • 我的域模型和向上的服务层不必依赖于 LinqToSql 提供程序(如果我愿意,我可以用接口(interface)替换我的 DAL)
  • 我的服务方法可以并且确实返回具有多个“ anchor ”的完整对象图,以使用抽象出特定延迟加载实现的类进行延迟加载 - 所以我可以使用 LinqToSql 特定的差异执行或其他东西(例如匿名委托(delegate). 再次引用 this answer )
  • 我可以在我的整个应用程序中维护 IQueryable 结果(如果我愿意,甚至可以维护到 UI),从而允许无限的 LINQ 查询链接,而不必担心性能。

关于linq-to-sql - 使用 Linq-to-SQL、IOC 和存储库模式预取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1614396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com