预取的数据与皇宫-对-SQL、海洋学委员会和库图案
-
06-07-2019 - |
题
使用皇宫-对-SQL我想要取一些数据。
1)共同解决办法是处理 DataLoadOptions, 但在我的架构,它不会的工作,因为:
- 选项,必须设定之前先查询
- 我使用的是国际奥委会,所以我不会直接instanciate的属性(我无法执行代码在instanciation)
- 我的属性是持久性的持续时间的一个网络的要求
2)我们看到的另一种可能基于 加载 的 数据及其孩子的 在一个方法,然后返回唯一的数据(所以这孩子已经装载) 看到一个例子在这里
尽管如此,在我的架构,它不能工作:
- 我查询级联出我的储存库,可供许多服务将增加条款
- 我的工作与接口,具体的实例的皇宫-对-sql对象不要离开储存库(是的,你可以工作与接口,并添加条款)
- 我的仓库是通用的
是的,这一架构是安静的复杂的,但它很酷因为我可以播放的代码就像乐高;)
我的问题是:什么是的 其他的可能性 预取一个数据?
解决方案
在我的程序也许我使用一个变化到你潜在的解决方案,#2.这有点难以解释,但简单:我链和推迟迟缓装载在我的模型,与定义 懒惰的课程 以抽象离LinqToSql特定的不同执行,我利用 IQueryable
.福利:
- 我域模型和业务层向上不一定必须取决于LinqToSql提供者(我可以交换我的DAL用的接口,如果我想)
- 我的服务的方法可以做返回的完整对象的图表与多个'固定点'懒装使用的类的抽象离开一个特别偷懒加载执行情况-所以我可以使用LinqToSql特定于不同的执行或其他什么东西(eg.佚名代表。再次,参阅 这个答案)
- 我可以维持
IQueryable
结果我的整个应用程序(即使到用户界面,如果我想要)因此允许无限皇宫查询链接,而无需担心的业绩。
其他提示
我不知道还有其他的可能性,好像你已经把LinqToSql到其限制(我可能是错误的,但是).
我认为你最好的选择在这一点是:
- 添加一些"非通用的"方法的应用程序来处理的 具体情况下你想要的/需要预先加载不 使用你的"正常"、"通用"的基础设施对于那些方法。
- 使用一个奥姆有更复杂的支持渴望和懒惰的装载。
我找到一个解决方案。我的答案是依赖注射'.
它通常附带IOC,并意味着你可以有你的IOC容器的管理注射类在instanciation.
所有我需要的是注入 CustomDCParameter 上课的时候我instanciate DC。这类中将包含的规则,并构造将适用于所有的人。
不隶属于 StackOverflow