LINQ to SQL: DataType Mapping Between SQL And .NET
1 |
好奇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是個好東西呀!!
Comments
# by mOMo
哇,這個表格真是不錯!很好的參考資料。 在這裡學到不少知識。^^