2009-02-25 56 views
8

我在我的WPF應用程序中創建了一個.MDF數據庫。爲什麼我的SubmitChanges()不能在LINQ-to-SQL中工作?

我然後生成LINQ到SQL類和使用LINQ讓所有的客戶。

然後我瀏覽它們並更改它們的每個姓氏。

然而,當我打電話的SubmitChanges,數據庫保持不變

我認爲是的SubmitChanges()的目的,提交更改到數據庫?

我錯過了什麼,如何「提交更改」回到我的數據庫?

public Window1() 
{ 
    InitializeComponent(); 

    Main2DataContext _db = new Main2DataContext(); 
    var customers = from c in _db.Customers 
        select c; 

    foreach (var customer in customers) 
    { 
     customer.LastName = "CHANGED lastname"; //ListBox shows changes 
    } 

    _db.SubmitChanges(); //does NOT save to database (???) 

} 
+2

這是一個非常愚蠢的問題,但你在客戶表上有一個主鍵嗎? – 2009-02-25 15:38:09

+0

是:ID是主鍵,不允許NULL,並且Identity Specification設置爲IsIdentity = Yes。我用Visual Studio創建了.MDF文件。 – 2009-02-25 15:42:44

回答

15

我想我知道問題是什麼。您使用的是本地.mdf文件嗎?如果是這種情況,請檢查bin/debug文件夾。我敢打賭,你有一個數據庫在那裏的變化。我認爲您的項目中有一個.mdf文件,每次構建時都會將其複製到bin/debug文件夾中。因此,所做的更改將保存到副本中,並且您沒有看到它反映在直接位於項目中的副本中。

+0

我剛剛完成了這個,看起來正確。附加到MDF的bin/debug副本,您將看到更改。 – 2009-02-25 15:56:52

2

確保您_db未在檢索和變化之間的任何一點得到復位到一個新的背景下,如果這麼好,就是問題所在。您也可以通過執行TheListBox.ItemsSource = _db.Customers;來簡化您的數據源分配。我在當前的代碼中有很多地方,我正在做你正在描述的內容,而且這些變化正在推廣。在您的上下文另外一個建議,設置日誌記錄(設置_db.Log一些作家,我一般採用Console.Out這樣我就可以在調試時腕錶在輸出窗口的變化),所以你可以看到,當你調用SubmitChanges(),實際上確實發生的變化。