我在 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();
什么可能导致 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).
回答
解决方案有三方面:
我正在更改与在 Visual Studio 中查看的不同的数据库,解决方案:
var db = new MainDataContext(@"C:\Users\TestUser\Documents\Visual Studio 2008\Projects\TestPageManager23434\TestPageManager23434\Data\Main.mdf"))
使更新工作但不是 SubmitChanges(),解决方案是设置主键。
它仍然没有显示所有的 chagnes,问题是我打开了许多“显示数据”窗口,这些窗口没有被更新