LINQ to SQL: DataType Mapping Between SQL And .NET

好奇LINQ To SQL如何將SQL Data Type對應成.NET Data Type,我做了一個小實驗: 建了一個有18種不同資料型別的Data Table,把它拉進dbml中,看看LINQ to SQL對應出來的資料型別為何?

以下是整理出來的結果:

SQL Data Type Linq to SQL .NET Data Type
tinyint System.Nullable<byte>
smallint System.Nullable<short>
int System.Nullable<int>
bigint System.Nullable<long>
float System.Nullable<double>
real System.Nullable<float>
smallmoney System.Nullable<decimal>
money System.Nullable<decimal>
numeric(6, 2) System.Nullable<decimal>
numeric(12, 2) System.Nullable<decimal>
numeric(18, 2) System.Nullable<decimal>
xml System.Xml.Linq.XElement
image System.Data.Linq.Binary
binary, varbinary System.Data.Linq.Binary
bit System.Nullable<bool>
datetime System.Nullable<system.datetime>
timestamp System.Data.Linq.Binary
uniqueidentifier System.Nullable<system.guid>
varchar, char, nvarchar, nchar, text, ntext System.String
char(1), nchar(1) System.Char

之前見識過ODP.NET會依不同數字欄位長度切換Single、Double或Decimal。在LINQ to SQL中也有類似的彈性做法,tinyint, smallint, int, bigint分別變成byte, short, int及long,但是smallmoney, money, numeric則一律轉成decimal。我喜歡這個設計方式,如此將不至於產生上次遇到的ODP.NET數字誤差。

SQL xml Data Type會變成System.Xml.Linq.XElement, image, binary, varbinary會變成System.Data.Linq.Binary,而timestamp則對應成System.Data.Linq.Binary。

最後提醒一下,除了Linq.Binary, Linq.XElement及String外,若資料庫欄位允許NULL時,則LINQ to SQL會把它轉成Nullable<T>,讓我們可以用null來對應到資料庫的NULL,十分直覺化。

愈用愈覺得LINQ to SQL是個好東西呀!!

歡迎推文分享:
Published 28 May 2008 07:20 PM 由 Jeffrey
Filed under: ,
Views: 10,584



意見

# mOMo said on 28 May, 2008 07:50 PM

哇,這個表格真是不錯!很好的參考資料。

在這裡學到不少知識。^^

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<May 2008>
SunMonTueWedThuFriSat
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication