2009-07-13 189 views
22

當使用Linq-to-SQL,將列添加到現有表中,並在該新列上設置默認值時,似乎Linq to SQL忽略默認值。 有沒有其他人經歷過這種行爲?有沒有辦法解決這個問題,以便Linq-to-SQL或SQL Server自動設置默認值?Linq-to-SQL忽略SQL Server默認值

我添加的列是類型位的,設置爲1

+1

重複:http://stackoverflow.com/q/201706/11683(不投票結束,兩者同樣有用)。 – GSerg 2016-11-06 19:14:06

回答

11

我現在通過使用this blog的一個例子明確地解決了這個問題。

partial void OnCreated() { 
    if (this.DateTimeCreated == null) { 
      this.DateTimeCreated = DateTime.Now; 
    } 
} 

我需要這個傳遞到部分DataContext類,作爲默認的一個被自動覆蓋每次在DBML改變一些東西。

4

我已經看到了這個默認值。你可以做的是進入l2sql設計器,查看具有默認值的表列的屬性。有一個屬性「自動生成的值」,將其設置爲true。

自動爲標識列自動設置此值爲true,因爲在這種情況下,SQL Server正在生成行ID。

+1

這不起作用,因爲我需要以後更新列。當我嘗試你的解決方案時,我得到一個錯誤:「在數據庫中計算或生成的成員不能改變」 – jao 2009-07-13 18:38:15

+0

這太糟糕了。我從來沒有嘗試過這個領域,我想稍後改變(我用它爲DateCreated列)。即使在這種情況下,我決定不使用SQL默認值,並在我的代碼中明確地設置它 - 推理是我的域邏輯的一部分,因此它屬於我的域邏輯代碼的其餘部分。 – 2009-07-14 16:45:26

+0

我認爲我得到的錯誤是Linq-to-sql中的一個錯誤。 「自動生成的值」工具提示顯示「插入時自動生成值」 – jao 2009-07-20 16:33:03

7

進入設計器並選擇「自動同步」值的「OnInsert」。這將在記錄插入數據庫時​​同步該值。

+0

請參閱http://www.intrepidstudios.com/blog/2009/2/6/using-default-values-in-linq-to-sql。 aspx獲取更多信息。這是最終的方法。 – GONeale 2011-08-24 01:23:04

11

將Auto Generated屬性設置爲True。

enter image description here

1

我面臨布爾數據類型的使用缺省的相同的問題虛假和不更新該值 因此,當我看到數據庫表中,我發現沒有主鍵被設置,因此當我設置了更新後發現的主鍵。 所以檢查一個表是否有主鍵。

1

如果您需要更改自己的代碼中的值(例如,具有默認值的類型表值),那麼請勿使用「自動生成的值」,否則當您嘗試更新時會出現該值。

Value of member 'AlternativeQuoteStatus' of an object of type 'OrderDetail' changed. A member that is computed or generated by the database cannot be changed.

我喜歡當我創建的對象,在OnCreated回退爲他人在這裏描述的設定值。