2013-06-05 119 views
4

我正在使用Visual Studio 2012.我在本地数据库(巧妙地命名为Database1)中有一个非常简单的Products表。它有两个字段:id和Name。我预装了一些测试数据。实体框架不会将数据刷新到数据库

以下代码应更新第一个产品的名称。在内部,它的确如此。我可以检索所有产品并查看第一个人的姓名是“衬衫”。但是这个改变永远不会被刷新到数据库。该记录从不更新。检查数据库显示该名称未被更改。

我的问题很简单:为什么更改没有发送到数据库?

using (var context = new Database1Entities()) 
{ 
    var products = context.Products; 

    products.First().Name = "Shirt"; 
    context.SaveChanges(); 
} 

在此先感谢。

= = = = = = = = = = = = = = = = - = - = - = = = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - =

编辑:

我尽我所能在这里输入完整的代码和输出。但是,无论我做什么,我都会继续收到“您的帖子似乎包含未正确格式化的代码”错误消息。 30分钟后,我放弃了。

编辑:

代码和输出是在这里:http://pastebin.com/GmQtwAND

+0

您是否确定在上下文中启用了更改跟踪? – dksh

+0

但是你是否在改变任何值?衬衫=衬衫看起来像我一样... – ErikEJ

+0

是的,context.Configuration.AutoDetectChangesEnabled = true。 此外,我预先加载到数据库中的初始值是“Hat”,即使将其设置为“Shirt”后,该值仍保留在数据库中。 –

回答

3

我发现了这个问题......及其解决方案。

数据库文件的“复制到输出目录”属性被设置为“始终复制”。这当然意味着每次构建应用程序时,都会将新副本放入Bin目录中。解决方法是将其设置为“如果更新,则复制”。卫生署。

换句话说,这些变化在数据库中一直存在,但是当应用程序重建时数据库被破坏了。

2

嗯,这可能意味着你不跟踪变化,你怎么样尝试设置状态来 - >修改,看看它是否是上班:

var product = products.First(); 
product.Name = "Shirt"; 
product.State = EntityState.Modified; 
context.SaveChanges(); 

如果你想启用它的背景,你可以做这样的:

context.Configuration.AutoDetectChangesEnabled = true; 
+1

谢谢。 “产品”没有“国家”财产。至少我没有看到。而且,是的,context.Configuration.AutoDetectChangesEnabled = true。顺便说一句,“SaveChanges()”返回1,我认为这是更新记录的计数。 –

相关问题