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

时间:2009-10-16 16:21:15

标签: wpf linq-to-sql submitchanges

我在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).

ANSWER

解决方案有三个方面:

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

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

  • 使更新工作但不是SubmitChanges(),解决方法是设置主键。

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

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

您使用的是SQL Expression mdf文件吗?

有一个article关于这可能会导致您获得该文件的副本而不是原始副本,从而导致您所描述的症状。

FTA:

  

我认为项目系统或服务器   资源管理器向导提供“复制”您的   mdf进入你的项目目录。   也许你正在操作副本   数据库和查看另一个   服务器资源管理器。

答案 2 :(得分:2)

由于某种原因,上下文可能无法跟踪更改。尝试将db.Log连接到编写器,并在调用SubmitChanges()时检查LINQ-> SQL正在执行的操作。

db.Log = Console.Out;

然后你可以看看你的输出窗口在调试中运行,看看发生了什么。

答案 3 :(得分:0)

我遇到了同样的问题,我在项目中看到的数据库中的记录未被SubmitChanges方法修改。

经过如此多的试验和研究后,我发现系统将数据库 Northwnd.mdf的另一个版本放在项目的根目录\Bin\Debug\Northwnd.mdf中。这就是完美发生变化的地方。