`
backspace
  • 浏览: 137206 次
文章分类
社区版块
存档分类
最新评论

LINQ to Sql系列三 延迟加载

 
阅读更多

首先还是看一下数据表的关系图:

l2s04

从上图中,我们可以发现,TStudent与TClass之间是一对一的关系(需要两张表),而TStudent与TCourse之间是多对多的关系(需要三张表)。

DeferredLoadingEnabled

DataContext的DeferredLoadingEnabled属性是指是否需要延时加载,默认值为true。以TStudent为例,其延时加载的对象是指TClass和对应的TCourse。设定延时加载为true时,当访问到TStudent实例的TClass属性或者TStudentCourse属性时会自动加载TClass表和TStudentCourse表中的数据,如下示例代码:

public static void DeferrredLoading()
        {
            using (L2SDBDataContext db = new L2SDBDataContext())
            {
                //output log on console
                db.Log = Console.Out;
                db.DeferredLoadingEnabled = true; //default value:true

                //get a student
                TStudent student = db.TStudents.FirstOrDefault();

                //access property TClass of TStudent
                Console.WriteLine("{0}属于{1}",student.Name,student.TClass.ClassName);
            }
        }

从代码中可以看到,当DataContext的DeferredLoadingEnabled为true时,可以直接访问关系表中的数据。如student.TClass。

输出结果:

l2s08

从结果我们可以看到,DataContext用到了两段sql,分别从TStudent和TClass中加载数据。如果将DataContext的DeferredLoadingEnabled设为false时,再去访问关系表的数据会抛出空引用的异常。

LoadWith

LoadWith不是DataContext的方法,而是DataLoadOptions的方法,可以给DataContext设定 LoadOptions属性来改变DataContext加载数据的方式;换句话说是LoadOptions设定是否在select主表数据时同时用 join加载关联表的数据。

比如,我要在select TStudent表的时候同时用另一个sql语句把其TClass也select出来,代码如下:

public static void LoadWith()
        {
            using (L2SDBDataContext db = new L2SDBDataContext())
            {
                //output log on console
                db.Log = Console.Out;

                var loadoptions = new DataLoadOptions();

                //设定在load TStudent的时候同时load哪个表
                loadoptions.LoadWith<TStudent>(p=>p.TClass);
                db.LoadOptions = loadoptions;

                //获取一个student
                TStudent student = db.TStudents.FirstOrDefault();

                //access property TClass of TStudent
                Console.WriteLine("{0}属于{1}", student.Name, student.TClass.ClassName);
            }
        }

输出结果,注意观察生成的sql语句。

l2s09

这次生成的是一段sql,用到了inner join内联接。

2
3
分享到:
评论

相关推荐

    LINQ To SQL实现分页效果源码

    在本例中,我们关注的是LINQ to SQL,这是一种特定的LINQ实现,它用于与关系数据库进行交互,如SQL Server 2005。在VS2008中,LINQ to SQL提供了直观的方式来映射数据库模式到.NET类,从而简化了数据访问。 分页是...

    c#linq to sql

    6. **延迟加载**:默认情况下,LINQ to SQL实现的是延迟加载,即只有当需要访问相关对象时,才会从数据库加载。这样可以提高性能,避免一次性加载大量数据。 7. **事务支持**:DataContext支持数据库事务,可以确保...

    LINQ To Sql学习文档

    - **查询操作**:LINQ To SQL 提供了一系列查询方法,如 Select、Where、OrderBy 等,这些方法可以帮助开发者轻松地构建复杂的查询逻辑。 - **数据修改**:除了查询之外,LINQ To SQL 还支持数据的插入、更新和删除...

    Linq to Sql 教程大全

    - **概念**:LINQ to SQL 默认采用延迟加载的方式,即只在实际需要数据时才执行查询。 - **优点**:提高性能,减少不必要的数据加载。 - **如何启用/禁用**:可以使用`.ToList()`或`.ToArray()`方法立即加载所有数据...

    linq to sql 学习笔记

    - **DATACONTEXT**:在LINQ to SQL中,DataContext是与数据库交互的主要类,它封装了与数据库的连接,并管理着一系列与数据库表对应的实体类。 - **定义实体类**:通过继承自System.Data.Linq.Table,可以创建...

    LINQ to SQL手册

    **LINQ to SQL** 是 .NET Framework 中的一个技术,它允许开发者使用 C# 或 VB.NET 语言的查询表达式语法来操作数据库。本手册详细介绍了使用 LINQ to SQL 进行数据查询、操作和更新的各种方法,涵盖了从基础到高级...

    linq to sql学习资料(全word文档)

    "LINQ to SQL"是LINQ的一个特定实现,它允许开发者直接在SQL Server数据库上执行查询,将SQL语句转换为.NET代码,极大地简化了数据访问层的操作。本学习资料包涵盖了并发控制、事务管理、查询语法以及存储过程等多个...

    LINQ to SQL技术进行增删改查!

    LINQ to SQL还支持延迟加载,即当需要时才加载关联的对象,这有助于减少数据库交互次数,提高性能。另外,它提供了事务支持,可以在一组操作中确保数据一致性。 总的来说,LINQ to SQL提供了一种优雅的方式来进行...

    LINQ(LINQ TO SQL)研究笔记

    在B/S技术三层框架下使用LINQ to SQL,通常涉及以下关键步骤: 1. **项目结构**:首先,创建一个ASP.NET 3.5项目,并按照三层架构组织代码,包括页面层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。实体类...

    linq to sql 、linq to xml 、linq to object

    在.NET环境中,LINQ主要分为三个主要部分:LINQ to SQL、LINQ to XML和LINQ to Objects。 1. **LINQ to SQL**: LINQ to SQL 是一种数据访问技术,它允许开发者使用C#或VB.NET的查询语法直接对SQL Server数据库...

    linq to sql

    #### 三、LINQ to SQL的核心概念 - **DataContext**:用于与数据库建立连接以及执行查询的核心类。 - **Table**:表示数据库中的表,通过DataContext访问。 - **ObjectSet**:表示查询结果集。 - **Query ...

    Linq To Sql入门教程

    LINQ to SQL默认使用延迟加载,只有当真正需要访问相关对象时才会执行数据库查询。如果需要立即加载关联数据,可以启用即时加载: ```csharp db.ContextOptions.LazyLoadingEnabled = false; ``` ### 八、存储过程...

    LINQ-to-SQL-console.zip_linq to sql

    7. **性能优化**:虽然LINQ to SQL简化了数据库操作,但在处理大量数据或复杂查询时,可能需要考虑性能优化,如延迟加载、批处理更新等。 这个压缩包中的“LINQ to SQL console”程序很可能是为了展示如何在控制台...

    通过Linq操作Sql Server数据库

    Linq to SQL是Linq的一个子集,专门用于处理SQL Server数据库。它通过建立对象模型来映射数据库表,使得开发者可以通过对象操作来实现对数据库的操作。 **3. 使用Linq进行数据库操作** - **添加数据**:通过调用...

    _____Linq_to_sql.rar_linq to sql微软

    标题中的"_____Linq_to_sql.rar_linq to sql微软"暗示了这是一个关于Microsoft LINQ to SQL技术的压缩包文件,可能是由一系列文档或教程组成,主要聚焦于如何使用这项技术。LINQ(Language Integrated Query,语言...

    LINQ to SQL语句(17)之对象加载

    3. **延迟加载(Lazy Loading)**:默认情况下,LINQ to SQL采用延迟加载策略。这意味着当你请求一个实体对象时,只有该对象本身会被加载,与其关联的对象并不会立即加载,除非你明确地访问它们。这种方式可以提高...

    Linq TO SQL 入门教程

    - **延迟加载**:理解 LINQ to SQL 中的延迟加载机制及其对性能的影响。 - **自定义映射**:如何使用 LINQ to SQL 的高级特性来自定义实体与数据库之间的映射关系。 6. **并发与事务处理**: - **并发控制**:...

    一步一步学Linq to sql

    《一步一步学Linq to sql》是针对.NET开发者,特别是初学者的一份宝贵教程,旨在帮助读者深入了解和掌握Linq to SQL这一强大的数据访问技术。Linq to SQL是微软.NET Framework 3.5引入的一种语言集成查询(Language ...

    linq to sql进阶 教程

    《LINQ to SQL 进阶教程》是一份深入学习LINQ (Language Integrated Query)与SQL交互的宝贵资料,尤其适合已经掌握了基础概念并寻求提升的开发者。LINQ是.NET框架中的一项重要特性,它允许程序员使用一致的查询语法...

    LINQ_to_sql详细教程

    **LINQ to SQL 详细教程** LINQ (Language Integrated Query) 是 .NET Framework 中的一项技术,它允许开发者使用类似 SQL 的语法在各种数据源上进行查询,包括对象集合、XML、SQL 数据库等。其中,LINQ to SQL 是...

Global site tag (gtag.js) - Google Analytics