LINQ to SQL系列三 使用DeferredLoadingEnabled,DataLoadOption指定加载选项

本文详细介绍了LINQ to SQL中DataContext的DeferredLoadingEnabled属性和DataLoadOptions的LoadWith与AssociateWith方法。通过示例展示了如何使用这些特性来控制数据加载行为,包括延迟加载的启用与禁用,以及如何通过一次性SQL查询加载关联数据。同时,文中还讨论了LoadWith方法在减少SQL查询次数方面的优势,以及AssociateWith在有条件地加载关联数据时的不足之处。
摘要由CSDN通过智能技术生成

介绍linq to sql 的 DataContext类DeferredLoadingEnabled属性使用,以及DataLoadOptions限定加载相关表数据的LoadWith和AssociateWith方法。

本文中举例用到的数据模型如下:

Student和Class之间是多对一关系,Student和Course之间是多对多关系。

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

static void Main(string[] args)

{

    using (var writer = new StreamWriter(WatchSqlPath, false, Encoding.UTF8))

    {

        using (DbAppDataContext db = new DbAppDataContext())

        {

            db.Log = writer;

            //设置延时加载属性为true

            db.DeferredLoadingEnabled = true;

            //获得一个Student

            var aStudent = db.Students.First();

            //直接访问Student的Class属性ClassName

            Console.WriteLine("{0}属于{1}",aStudent.Name ,aStudent.Class.ClassName);

        }

    }

    Console.ReadLine();

}

当设置DataContext的DeferredLoadingEnabled属性为true时,可以直接访问关系表中的数据,我们可以看下以上代码使用到的SQL语句:

?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值