C#学习教程:存储更新、插入或删除语句影响意外的行数(0)存储更新、插入或删除语句会影响意外的行数(0)。实体在加载后可能已被修改或删除。刷新ObjectStateManager条目。我有以下课程:人publicclassPerson:IPerson{[Key][DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]publicintId{get;放;}publicstringFirstName{get;放;}publicstringLastName{get;放;}publicstringName{get{returnFirstName+""+LastName;}set{}}publicstringEmail{get;放;公共日期时间?LastModified{得到;放;}公共虚拟ICollection结果{get;放;}}用户资料publicclassUserProfile:Person{publicUserProfile(){Faculty=newFaculty();项目=新集合();结果=新集合();}publicstring用户名{get;放;}公共字符串CNP{得到;放;}publicvirtualFacultyFaculty{get;放;}公共虚拟ICollection项目{get;放;}}结果publicabstractclassResult:INamedEntity{protectedResult(){ResultType=newResultType();}publicintId{得到;放;}publicstringName{get;set;}publicvirtualResultTypeResultType{get;放;}公共虚拟ICollection人{得到;放;公共日期时间?LastModified{得到;放;}}使用以下方法向上下文添加值后:_ctx.Users.Single(u=>u.Id==userId).Results.Add(result);我在调用_ctx.SaveChanges()时遇到错误将我的函数更新为:publicboolSave(){try{_ctx.SaveChanges();}catch(OptimisticConcurrencyException){((IObjectContextAdapter)_ctx).ObjectContext.Refresh(RefreshMode.ClientWins,_ctx.Users);((IObjectContextAdapter)_ctx).ObjectContext.Refresh(RefreshMode.ClientWins,_ctx.Results);_ctx.SaveChanges();}返回真;@Html.HiddenFor(model=>model.Id)inedit.cshtml我遇到了这个问题,发现ID被认为是0,因为它不在页面上。我的ViewModel上也有这个(我正在使用视图模型方法)[HiddenInput(DisplayValue=false)][Key]publicintId{get;放;}弄清楚了。问题是我们有两个人在做这个项目,我的同事创建了他自己的DBContext实例,他正在更新一个而另一个。因此,对于以后遇到此问题的任何人,请确保您没有同时拥有两个不同的DBContext实例。您的异常意味着在从数据库获取它和修改它之间,您的数据发生了变化。默认情况下,实体框架实现乐观并发模型。这意味着在查询数据和更新数据之间不会对数据源中的数据持有锁。MSDN如何在对象上下文中管理并发。MSDN或按照此答案获取更新的背景。我在StackOverflow上遇到的问题是我没有正确设置动作绑定:publicActionResultEdit([Bind(Include="VehicleID,Name,CreateDate,PowerPS,DrivenKM")]Carcar){...}VehicleID使用了错误的标识符映射,因此EntityFramework始终将0作为主键。如果您遇到过这个问题并且上述解决方案都没有帮助您,也许您可??以试试这个。我也有这个奇怪的问题,我能够解决它的方法是将a字段设置为主键并使其自动递增或将其设置为Identity。假设您有Person表,并且您可能有personID,将其设为主键并确保它是自动递增的。向我的DbContext类添加了以下重载:usingSystem.Data.Entity.Core.Objects;使用System.Data.Entity.Infrastructure;公共类MyDbContext:DbContext{...publicintSaveChanges(boolrefreshOnConcurrencyException,RefreshModerefreshMode=RefreshMode.ClientWins){try{returnSaveChanges();}catch(DbUpdateConcurrencyExceptionex){foreach(DbEntityEntryentryinex.Entries){if(refreshMode==RefreshMode.ClientWins)entry.OriginalValues.SetValues(entry.GetDatabaseValues());否则进入。重新加载();}返回SaveChanges();然后在适用的地方调用SaveChanges(true)。有冲突是因为你用了乐观锁。使用ObjectStateManager条目解决并发问题并再次保存更改。MSDN站点中有一些示例代码。我也遇到了这个错误信息。导致我的错误的原因是主键/外键冲突。我已经将一些新数据推送到我的数据库中并且我的外键值已关闭(我的上传脚本中的错误)。使用SQLProfiler帮助追踪有问题的插入脚本,这可能会帮助您发现更新问题。希望这可以帮助其他有类似问题的人。谢谢Terry,让我们添加:搭建脚手架时,不要将[required]属性添加到您的密钥/ID。这可以防止您的上下文从url中提取密钥/ID。旁白:在模型上包含新布尔字段的迁移之后,我在脚手架控制器中发生了这种情况。这些字段未设置。确保将两个表的ID从视图传递给模型。在您的例子中,它是表Person和UserProfile的键。如果不需要在页面显示ID,可以添加@Html.HiddenFor(model=>model.PersonId)和@Html.HiddenFor(model=>model.UserProfileId)我在创建项目时出现了这个错误,甚至只是尝试做一个简单的插入。我们从预先存在的数据库生成EF模型,框架自动在多个字段上设置EntityKey=True。将除ID以外的所有设置为False即可解决问题。我不知道到底出了什么问题,但我只是做了这些步骤并解决了它。(我希望你能解决这个问题,因为我能够做到)步骤如下:(1)基于你的edmx表和你的EF文件的DB上下文,使用脚手架添加一个新的控制器。(2)现在savechangescreatedissue是edit方法。(3)现在将脚手架制作的编辑方法/整个控制器复制粘贴到原来的控制器中。(4)现在只要构建程序就可以了。更新我发现,要从视图中编辑数据,必须发送所有字段以再次写入控制器。如果在编辑时实体表中有任何字段缺失,则不允许编辑。特别是如果PK在标签中并发送到控制器进行编辑,则会生成此错误。在我的例子中,我有一个复合键并尝试更新它的一部分(3列组成一个复合键,我只更新其中的第3列)但EF不允许更改同一对象的键值,我通过以下方式更新它作为记录:Context.Database.ExecuteSqlCommand(udpateCommand);好吧,当我将EntityFramework6.13与CodeFirst一起使用时,我也遇到了这种类型的并发错误。在我自己弄清楚之前,我也赚了几个小时。所以它可以帮助那里的人。创建了一个具有复合主键的表,今天我将表的结构更改为仅使用一个主键(使用AutoIncrement)而不是复合键,并通过使用fluent-api配置进行迁移来更新表。表已更新,但主键未使用AutoIncrement更新,每当我尝试添加记录时,它都会显示并发错误。因此,当我设置字段的自动增量时,错误就消失了。希望能帮到你。我在谷歌搜索时偶然发现了这个问题。我有同样的错误信息,但原因是我没有设置一些强制性的非空值。也许这个发现对某人有帮助。我修复了一些在尝试更新记录时给出相同错误消息的代码。我最初有以下代码:[HttpPost]publicActionResultEdit(Projectproject){if(ModelState.IsValid){entity.Entry(project).State=EntityState.Modified;实体.SaveChanges();返回RedirectToAction("索引","主页");}返回视图(项目);}而不是下面的代码,以上是C#学习教程:storageupdate,insertordeletestatementaffectedanunexpectednumberofrows(0)EntityFramework分享的全部内容,如果有什么有用的需要进一步了解C#学习教程,希望大家多多关注——[HttpPost]publicActionResultEdit(Projectproject){if(ModelState.IsValid){entity.Entry(project).State=EntityState.Added;entity.SaveChanges();返回RedirectToAction("索引","主页");}返回视图(项目);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
