2009-10-16 75 views
3

我在WPF中用LINQ-TO-SQL設置了一個非常簡單的例子。什麼可能導致db.submitChanges()不能在linq-to-sql中工作?

我可以得到一個對象(pageItem)弄成這樣,我可以改變財產,當我打電話的SubmitChanges()它給了我沒有錯誤不保存的更改。

MainDataContext db = new MainDataContext(); 
var pageItem = (from p in db.PageItems 
       where p.Id == 1 
       select p).SingleOrDefault(); 

pageItem.Title = "changed"; 
db.SubmitChanges(); 

什麼可能導致SubmitChanges不提交更改?

更多信息:

這也不起作用,甚至db.ExecuteCommand不起作用,奇怪當調試F11沒有踏入的SubmitChanges()或ExecuteCommand(),爲什麼我不能介入那些?

using (var db = new MainDataContext()) 
{ 
    var pageItem = (from p in db.PageItems 
        where p.Id == 1 
        select p).SingleOrDefault(); 

    pageItem.Title = "changed"; 
    db.SubmitChanges(); 

    db.ExecuteCommand("INSERT INTO PageItems (Title) VALUES ('this is the title')"); 


    if (pageItem != null) 
     MainContent.Children.Add(new QuickForm(pageItem)); 

} 

更多信息:

的db.Log = Console.Out給了我這樣的:

SELECT [t0].[Id], [t0].[IdCode], [t0].[Title], [t0].[Description], [t0].[DisplayOrder] 
FROM [dbo].[PageItems] AS [t0] 
WHERE [t0].[Id] = @p0 
'TestPageManager23434.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\PresentationFramework.resources\3.0.0.0_de_31bf3856ad364e35\PresentationFramework.resources.dll' 
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1] 
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1 

INSERT INTO PageItems (Title) VALUES ('this is the title') 
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1 

The thread 0x1190 has exited with code 0 (0x0). 

ANSWER

的解決方案是三個方面:

  • 我改變了不同的da tabase比我在視覺工作室,解決方案:

    var db = new MainDataContext(@「C:\ Users \ TestUser \ Documents \ Visual Studio 2008 \ Projects \ TestPageManager23434 \ TestPageManager23434 \ Data \ Main.mdf」) )

  • 使更新工作但不SubmitChanges(),解決方案是設置主鍵。

  • 它仍然沒有顯示,問題是我有一些「數據顯示」打開窗戶是否使用SQL表達式MDF文件,該文件並沒有被更新

+0

您確定pageItem.Title沒有「更改」以開始? – hwiechers 2009-10-16 16:28:09

回答

6

,如果你沒有在SQL Server上的表定義主鍵

+1

這讓我想起了一次 - 我會提交更改,永遠不會得到異常,並且它會以愉快的方式繼續進行,但實際上並沒有將它變成數據庫。所有這些都是因爲我沒有在表格中指定我的主鍵。 – Matt 2009-10-16 16:45:47

+0

這就是原因。 – Denis 2013-12-05 23:42:07

2

所有chagnes?

有一個article關於這可能會導致您獲取文件的副本而不是原件,導致您描述的症狀。

FTA:

我認爲該項目系統或服務器 資源管理器嚮導提供了「複製」你 MDF到您的項目目錄。 也許您正在使用 數據庫的副本,並在 服務器瀏覽器中查看其他副本。

2

出於某種原因,上下文可能無法跟蹤更改。嘗試將db.Log連接到作家,並在調用SubmitChanges()時檢查LINQ-> SQL正在執行的操作。

db.Log = Console.Out; 

然後你可以看你的輸出窗口在調試中運行,看看發生了什麼。

0

我有同樣的問題,其中在數據庫記錄我在我的項目看沒有被修改這可能發生方法SubmitChanges

這麼多的試驗和研究後,我發現,該系統把數據庫Northwnd.mdf的另一個版本,在項目的根目錄\Bin\Debug\Northwnd.mdf。這就是發生完美變化的地方。

相關問題