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