• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

织梦吧 - dedecms,网站模板,建站教程,图片素材免费下载

DedeCMS视频教程
当前位置: 织梦吧 > 编程与数据库 > net编程 >

LINQ那些事儿(2)- 简单对象的CRUD操作和Association的级联操作(4)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-27点击:

先看看下面这段代码

01 var context = GenerateContext();
02 context.Log = Console.Out;
03
04 // 查询publisher对象
05 Console.WriteLine("Querying publisher");
06 Publisher publisher = context.Publishers.Where(
07 p => p.PublisherID == new Guid("ae825c5f-465d-4eb5-a2bb-cc1aeb5edb7d")).Single();
08
09 Console.WriteLine("Querying books")
10 // 当调用publisher.Books.GetEnumerator()时,执行book对象的查询 
11 foreach (Book book in publisher.Books)
12 {
13 Console.WriteLine(book.Title);
14 } 

在默认情况下,DataContext并不会加载Assocation对象(EntitySet<T> 或EntityRef<T>),当Assocation对象需要被访问时才会执行数据库查询,这就是所谓的lazy-loading。 LINQ2SQL的Layz-loading的实现与IEnumerable<T>的deferred query execution是一样的,有兴趣可以看看EntitySet<T>.GetEnumerator或 EntityRef<T>.Entity.Getter代码。

Lazy-loading的好处是避免了不必要的查询,但是在某些场合确定Assocation对象都应该加载时,我们可以设置DataContext. LoadOption来指定Assocation对象的加载:

1 DataLoadOptions option = new DataLoadOptions();
2 option.LoadWith<Publisher>(p => p.Books);
3 context.LoadOptions = option;

总结:本节讨论了如何使用LINQ2SQL来进行简单对象和涉及Association的对象的CRUD操作。示例代码段在只涉及一个DataContext对象或在单线程的情况下都可以正确运行,但是当涉及多个DataContext或并发访问的情况的下会怎么样呢?这是我们接下来要讨论的。

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 tom@tiptop.cn ,  QQ