什么可能导致db.SubmitChanges()无法在linq-to-sql中工作?

Edw*_*uay 3 wpf submitchanges linq-to-sql

我在WPF中用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();
Run Code Online (Sandbox Code Playgroud)

什么可能导致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));

}
Run Code Online (Sandbox Code Playgroud)

更多信息:

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).
Run Code Online (Sandbox Code Playgroud)

回答

解决方案有三方面:

  • 我正在改变一个不同于我在visual studio中看到的数据库,解决方案:

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

  • 这使得Update工作但不是SubmitChanges(),解决方案是设置主键.

  • 它仍然没有显示所有的chagnes,问题是我有一些"显示数据"窗口打开,没有更新

Chr*_*sCa 6

如果您没有在SQL Server中的表上定义主键,则会发生这种情况