Linq to sql 为什么不是';我的SubmitChanges()是否在LINQ to SQL中工作?
我在WPF应用程序中创建了一个.MDF数据库 然后我生成了LINQtoSQL类,并使用LINQGET获取所有客户 然后我浏览了一遍,更改了他们的姓氏 但是,当我调用SubmitChanges时,数据库保持不变 我想这就是SubmitChanges()的目的,将更改提交到数据库Linq to sql 为什么不是';我的SubmitChanges()是否在LINQ to SQL中工作?,linq-to-sql,Linq To Sql,我在WPF应用程序中创建了一个.MDF数据库 然后我生成了LINQtoSQL类,并使用LINQGET获取所有客户 然后我浏览了一遍,更改了他们的姓氏 但是,当我调用SubmitChanges时,数据库保持不变 我想这就是SubmitChanges()的目的,将更改提交到数据库 public Window1() { InitializeComponent(); Main2DataContext _db = new Main2DataContext(); var custo
public Window1()
{
InitializeComponent();
Main2DataContext _db = new Main2DataContext();
var customers = from c in _db.Customers
select c;
foreach (var customer in customers)
{
customer.LastName = "CHANGED lastname"; //ListBox shows changes
}
_db.SubmitChanges(); //does NOT save to database (???)
}
我遗漏了什么,如何将更改“提交”回数据库
public Window1()
{
InitializeComponent();
Main2DataContext _db = new Main2DataContext();
var customers = from c in _db.Customers
select c;
foreach (var customer in customers)
{
customer.LastName = "CHANGED lastname"; //ListBox shows changes
}
_db.SubmitChanges(); //does NOT save to database (???)
}
我想我知道问题是什么。您正在使用本地.mdf文件吗?如果是这种情况,请检查bin/debug文件夹。我敢打赌你有一个数据库在那里的变化。我认为您的项目中有一个.mdf文件,每次构建时都会将其复制到bin/debug文件夹中。因此,更改被保存到副本中,而您没有看到它反映在直接驻留在项目中的副本中。确保您的数据库在检索和更改之间的任何时候都不会重置为新上下文,如果这是个问题的话。您还可以通过执行ListBox.ItemsSource=\u db.Customers来简化数据源的分配代码>。在当前代码中,我有很多地方完全按照您所描述的进行操作,并且更改正在顺利进行。另外一个建议是,在您的上下文中设置日志记录(将
\u db.Log
设置为某个编写器,我通常使用控制台.Out
,这样我可以在调试时查看输出窗口中的更改),这样您就可以看到在调用SubmitChanges()
我输入的选项->调试->常规中选中了“将所有输出窗口文本重定向到即时窗口”选项?如果是这样,您的输出将进入即时窗口,否则请尝试围绕StringBuilder设置您自己的TextWriter并设置日志。另外,请确保您的输出窗口在调试时选择了“显示输出自”:db.Log=new System.IO.StreamWriter(@“App_Data\linq.Log”){AutoFlush=true},但它不会创建文件。嗯。这是一个非常愚蠢的问题,但您在客户表上有一个主键,对吗?是:ID是主键,不允许为空,并且标识规范设置为IsIdentity=Yes。我用VisualStudio创建了.MDF文件。我刚刚浏览了一下,它似乎是正确的。附加到MDF的bin/debug副本,您将看到更改。宾果,就是这样!欣赏每个人的坚韧,我只知道,因为我以前花了好几个小时追逐同样的东西。“很高兴我能帮忙。”迈卡,你的回答也帮了我。但我有点难过,因为我可能会忘记这一点,因为我没有像您那样花上几个小时。如果我们仍然希望使用本地db.mdf方法,那么解决方案是什么?有可靠的解决方案吗?