Castle Windsor - Linq to SQL Session Per Request和DataLoadOptions

时间:2012-02-22 08:51:51

标签: c# linq-to-sql castle-windsor

使用Castle Windsor管理Linq到SQL DataContext,每个网络的生命周期:

Component.For<MyDataContext>()
                    .ImplementedBy<MyDataContext>()
                    .LifestylePerWebRequest()

问题是我需要不时地加载一些子集合,并且一旦上下文返回了一些结果就无法设置DataLoadOptions。

  

返回结果后,不允许设置加载选项   来自查询。

我只能看到的选项是在构造函数中设置选项:

public SomeController(MyDataContext context)
{
_context = context;

var options = new DataLoadOptions();
            options.LoadWith<MyEntity>(x => x.Children);
            _context.LoadOptions = options;
}

关于如何处理这种情况的任何提示或建议都非常感激。

1 个答案:

答案 0 :(得分:0)

L2S不允许在打开上下文后修改获取策略。无论你如何处理这个问题。您的解决方案将起作用,但您可以做的另一件事是派生上下文并在派生的中应用您的预先加载。这样,您可以在控制器中注入已设置的实例。

您还可以考虑使用其他ORM工具,该工具支持在稍后阶段修改加载行为(EF,OpenAccess,NHibernate)。如果你有一个小型号,转换它应该不会太难。