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

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

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

LINQ to SQL系列三 使用DeferredLoadingEnabled,DataLoadOption指定加载选项_第1张图片

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语句:

?

你可能感兴趣的:(linq,sql,c#)