Wednesday, May 28, 2008 - Posts

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, text, ntext System.String

之前見識過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是個好東西呀!!

Posted 28 May 2008 08:20 PM by Jeffrey | 1 comment(s)
Filed under: ,

Search

Go

<May 2008>
SunMonTueWedThuFriSat
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
 
RSS
【工商服務】


BlogLook Score and Rank

Syndication