我在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,问题是我打开了一些没有更新的“显示数据”窗口
答案 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
中。这就是完美发生变化的地方。