Heim > Datenbank > MySQL-Tutorial > LINQ to Sql系列三 延迟加载

LINQ to Sql系列三 延迟加载

WBOY
Freigeben: 2016-06-07 17:44:51
Original
1100 Leute haben es durchsucht

LINQ to Sql系列三 延迟加载 首先还是看一下数据表的关系图: 从上图中,我们可以发现,TStudent与TClass之间是一对一的关系(需要两张表),而TStudent与TCourse之间是多对多的关系(需要三张表)。 DeferredLoadingEnabled DataContext的DeferredLoadingEn

LINQ to Sql系列三 延迟加载

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

l2s04

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

DeferredLoadingEnabled

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

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(,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出来,香港服务器,代码如下:

LoadWith() { using (L2SDBDataContext db = new L2SDBDataContext()) { //output log on console db.Log = Console.Out; var loadoptions = new DataLoadOptions(); //设定在load TStudent的时候同时load哪个表 loadoptions.LoadWith(p=>p.TClass); db.LoadOptions = loadoptions; //获取一个student TStudent student = db.TStudents.FirstOrDefault(); //access property TClass of TStudent Console.WriteLine(, student.Name, student.TClass.ClassName); } }

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

l2s09

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

posted on

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage