2011-08-22 61 views
4

我有一個c#.net桌面應用程序,其中我使用Linq作爲ORM和SQL Server Express作爲我的數據庫。所以,當我使用dataContext.CreateDatabase()方法時,它以與linq.cs中相同的順序創建列的時間的90%。在剩下的10%中,少數幾列的順序混亂。 (提到的百分比是近似的,Linq.cs是從SqlMetal生成的)DataContext.CreateDatabase以隨機順序創建列的數據庫

是否有一個特定的原因,爲什麼會發生或有一些設置來控制..? 我想過使用訂單,因爲數字列在30左右。並且有15到20個表格。

UPDATE

我們使用在混合方式的數據庫(即,也直接執行SQL命令)。這是我尋找列順序的原因之一。

+1

不,對不起。你關心訂單的原因是你的編碼標準不好。字段總是隻能用名字查詢。混合動力在這裏沒有任何藉口。使用沒有違反字段順序的命令是嚴重的疏忽。 – TomTom

+0

我有點理解,我正在做的錯誤。 :) – Prakash

回答

4

在其內部,LINQ-to-SQL使用SQL語言。當它創建表時,如果你登錄你的SQL Server,你會看到SQL語句,比如ALTER TABLE ADD COLUMN ...

ADD COLUMN不允許設置列位置。更一般地說,SQL(語言,天氣是Oracle,MySQL或SQLServer)不提供控制列位置的工具,所以列的順序僅取決於它們的創建順序。

此行爲僅供參考。你不應該依賴列順序。大多數數據訪問框架都會明確提出反對意見,它們不保證任何時候列的順序不變。

另外,對於你的情況,你使用的是LINQ到SQL,所以除非你打算以混合方式使用它(也就是直接執行SQL命令),順序無關緊要,因爲你將訪問列通過相應的命名屬性。

因此,如果確實以混合方式使用它,請確保在執行SqlCommands時始終指定列名稱。不要寫INSERT INTO MYTABLE VALUES (1,2,3),而是寫INSERT INTO MYTABLE(COL1, COL2, COL3) VALUES (1,2,3)

此外,我不太明白你爲什麼說你要使用訂單,因爲有30列。首先,30不高(20個表都不高),其次,如果它們可以通過它們的位置調用(如ADDRESS1,ADDRESS2,ADDRESS3),通常意味着數據庫設計存在缺陷。請參閱1st normal form

+0

那麼,我們確實有混合使用的方式。這是問題出現的地方。可能是我會在問題中更新。 – Prakash

+0

我對那裏觀察到的統計更加好奇。 – Prakash

+0

不,你應該更新你的代碼;)按位置引用字段?如果你是初中生,請和你的老師談談。如果你是高級:請爲比賽工作。這種類型的(初學者)錯誤。更新您的代碼以明確指定您引用的字段。在幾個月內,你會感謝所有人建議你這樣做。 – TomTom