Asp.net mvc 不加载整个关系

Asp.net mvc 不加载整个关系,asp.net-mvc,linq-to-sql,Asp.net Mvc,Linq To Sql,我有一个简单的数据库,使用datacontext从中生成Linq2SQL类。在应用程序的一部分中,我希望加载整个关系,以便获得子记录。在应用程序的另一部分中,我将跨越模型和视图之间的边界传递这种关系,我不想传递整个过程,因为子对象集非常大。有没有办法不让这些子类在一个部分中导出,而在另一个部分中导出 我知道在datacontext中将child属性设置为False,但这是一个全局更改 您可以使用数据上下文上的DataLoadOptions设置来完成此操作。您的应用程序中可能会有某种生成器类。为了

我有一个简单的数据库,使用datacontext从中生成Linq2SQL类。在应用程序的一部分中,我希望加载整个关系,以便获得子记录。在应用程序的另一部分中,我将跨越模型和视图之间的边界传递这种关系,我不想传递整个过程,因为子对象集非常大。有没有办法不让这些子类在一个部分中导出,而在另一个部分中导出


我知道在datacontext中将child属性设置为False,但这是一个全局更改

您可以使用数据上下文上的DataLoadOptions设置来完成此操作。您的应用程序中可能会有某种生成器类。为了获得最快、最脏的解决方案,您可以执行以下操作

public class SqlContextBuilder
{
    public SqlContextBuilder(MyDataContext dataContext)
    {
        _dataContext = dataContext;
    }
    private readonly MyDataContext _dataContext;
    public MyDataContext CreateEagerLoadingContext()
    {
        var options = new DataLoadOptions();
        // set those options!
        _dataContext.LoadOptions = options;
        return _dataContext;
    }
    public MyDataContext CreateLazyLoadingContext()
    {
        // lazy loading happens by default
        return _dataContext;
    }
}

解决方案之一是将关系传递为可解关系。这将确保在需要关系之前不会执行关系。如果在关系上循环,那么它将为每个子级执行


另一种技术可能是使用DTO对象创建要传递的ViewModel。这意味着您的ViewModel可能与界面非常相似

这并不能阻止数据的加载,它只是将数据延迟到请求时。当我将一组数据传递回视图时,它被请求并填充。ORM将具有绑定(前提是您使用相同的DBML)。如果您从未请求过,子类将永远不会被填充。因此,您有一个获取机会,其中子类在初始查询中填充,另一个获取机会是延迟加载(或者根本不加载)。