Linq to sql 使用Linq到SQL、IOC和存储库模式预取中的数据
使用LINQtoSQL,我想预取一些数据 1) 常见的解决方案是处理数据加载选项,但在我的体系结构中它不起作用,因为:Linq to sql 使用Linq到SQL、IOC和存储库模式预取中的数据,linq-to-sql,architecture,inversion-of-control,datacontext,prefetch,Linq To Sql,Architecture,Inversion Of Control,Datacontext,Prefetch,使用LINQtoSQL,我想预取一些数据 1) 常见的解决方案是处理数据加载选项,但在我的体系结构中它不起作用,因为: 必须在第一次查询之前设置选项 我使用的是IOC,所以我不直接实例化DataContext(我无法在实例化时执行代码) 我的DataContext在web请求期间是持久的 2) 我看到了另一种可能性,即在方法中加载数据及其子项,然后只返回数据(因此子项已加载) 然而,在我的体系结构中,它无法工作: 我的查询从我的存储库中级联出来,可以被许多将添加子句的服务使用 我使用接口,
- 必须在第一次查询之前设置选项
- 我使用的是IOC,所以我不直接实例化DataContext(我无法在实例化时执行代码)
- 我的DataContext在web请求期间是持久的
- 我的查询从我的存储库中级联出来,可以被许多将添加子句的服务使用
- 我使用接口,linq到sql对象的具体实例不会离开存储库(是的,您可以使用接口和添加子句)
- 我的存储库是通用的
我的问题是:预取数据的其他可能性是什么?我不知道其他可能性,似乎您已经将LinqToSql推到了极限(但是,我可能错了) 我认为在这一点上,你最好的选择是:
该类将包含规则,构造函数将应用所有规则。在我的应用程序中,我可能会对您的潜在解决方案使用一种变体#2。这有点难以解释,但很简单:我用custom在模型中链接并延迟延迟延迟加载,以便从LinqToSql特定的差异执行中抽象出来,我用
IQueryable
利用了这些差异执行。好处:
- 我的域模型和服务层不一定要依赖于LinqToSql提供程序(如果愿意,我可以用接口交换DAL)
- 我的服务方法可以并且确实返回完整的对象图,其中包含多个“锚定点”,用于使用抽象掉特定延迟加载实现的类进行延迟加载,因此我可以使用LinqToSql特定的差异执行或其他方法(例如,anon委托。再次,请参阅)
- 我可以在我的整个应用程序中维护
结果(如果我愿意,甚至可以到UI),从而允许无限的LINQ查询链接,而不必担心性能IQueryable