日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[转自雨痕]LINQ to SQL - Delay Loaded

發布時間:2024/3/26 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转自雨痕]LINQ to SQL - Delay Loaded 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文: http://www.rainsts.net/article.asp?id=550

?

對 ORM 而言,延遲加載(也叫 Lazy Loading)是必須的,畢竟當我們只是獲取用戶基本信息時,總不能動不動就返回大段的用戶個人簡介不是。

在 VS 2008 O/R Designer 中,很容易找到 Delay Loaded 的設置。



只是當我在自動生成的代碼中找尋這個設置時,著實迷糊了半天。基于慣性思維,我查看了幾乎所有的特性(Attribute)聲明,卻一無所獲,最后才發覺這個家伙竟然是這個樣子。

Delay Loaded = False

[Table(Name="dbo.[User]")]
public partial class User : INotifyPropertyChanging, INotifyPropertyChanged
{
??private string _Job;
}


Delay Loaded = True

[Table(Name="dbo.[User]")]
public partial class User : INotifyPropertyChanging, INotifyPropertyChanged
{
??private System.Data.Linq.Link<string> _Job;
}


習慣害人~~~~ 接下來我們測試一下延遲加載的作用。

using (DataClasses1DataContext context = new DataClasses1DataContext())
{
??context.Log = Console.Out;

??var user = (from u in context.Users where u.Name == "user1" select u).FirstOrDefault();
??Console.WriteLine(user.Name);
??Console.WriteLine(user.Job);
}


Delay Loaded = False 輸出

SELECT TOP 1 [t0].[Id], [t0].[Name], [t0].[Age], [t0].[Job]
FROM [dbo].[User] AS [t0]
WHERE [t0].[Name] = @p0
-- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [user1]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

user1
job


Delay Loaded = True 輸出

SELECT TOP 1 [t0].[Id], [t0].[Name], [t0].[Age]
FROM [dbo].[User] AS [t0]
WHERE [t0].[Name] = @p0
-- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [user1]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

user1
SELECT [t0].[Job]
FROM [dbo].[User] AS [t0]
WHERE [t0].[Name] = @p0
-- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [user1]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

job


當設置延遲加載后,查詢 User 時并沒有返回 Job 字段值,只有當訪問該屬性時才進行了第二次 SQL 操作,很顯然這就是我們所需要的。延遲加載雖然很有用,但并不表示我們應該將 n 多的 Column 設置成 Delay Loaded = true,或許你要做的是創建另外一個 One-to-One / Base-to-Detail。

注意!當 "context.DeferredLoadingEnabled = false" 或 "context.ObjectTrackingEnabled = false" 時,都會導致 Delay Loaded 失效,不再進行延遲字段載入操作。

總結

以上是生活随笔為你收集整理的[转自雨痕]LINQ to SQL - Delay Loaded的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。