当前位置: 首页 > 编程语言 > C#

附加一个类型的实体失败,因为另一个相同类型的实体已经有相同的主键值,共享

时间:2023-04-10 23:00:55 C#

附加类型的实体失败,因为相同类型的另一个实体已经具有相同的主键值。让我快速描述一下我的问题。我有5个客户的5个数据库,每个数据库都有一个名为SubnetSettings的表。我创建了一个下拉列表来选择一个客户,并将显示属于所选客户的SubnetSetting表,并允许我创建、编辑和删除。我可以毫无问题地创建、删除,但是当我想编辑数据时,它会带来错误:“/TMS”应用程序中的服务器错误。附加类型为“CFS.Domain.Entities.SubnetSettings”的实体失败,因为相同类型的另一个实体已经具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时可能会发生这种情况。这可能是因为有些实体是新的,还没有收到数据库生成的键值。在这种情况下,使用“Add”方法或“Added”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“Unchanged”或“Modified”。这是我的控制器中的编辑//GET:/SubnetSettings/Edit1/5publicActionResultEdit1(short?id){if(id==null){returnnewHttpStatusCodeResult(HttpStatusCode.BadRequest);}SubnetSettingssubnetsettings=detailView.SubnetSettings.SingleOrDefault(t=>t.Id==id);if(subnetsettings==null){returnHttpNotFound();}返回视图(子网设置);}//POST:/SubnetSettings/Edit1/5[HttpPost][ValidateAntiForgeryToken]publicActionResultEdit1([Bind(Include="Id,Name,fDialUp,fPulse,fUseExternalGSMModem,fGsmDialUp,bUploadMethodId")]SubnetSettings子网设置){if(ModelState.IsValid){templateDb2.Save(subnetsettings);返回RedirectToAction("索引");}返回视图(子网设置);}这是EF中的保存方法publicSubnetSettingsSave(SubnetSettingssubnetsettings){if(subnetsettings.Id==0){context.SubnetSettings.Add(subnetsettings);}else{context.SubnetSettings.Attach(subnetsettings);context.Entry(subnetsettings).State=EntityState.Modified;}context.SaveChanges();返回子网设置;我知道很难理解别人的代码,所以非常感谢任何建议。客观综合回答:你尝试更新的对象不是来自base,这是错误的原因。此对象来自View的帖子。解决方案是从base中检索对象,这将使EntityFramework知道并管理上下文中的对象。然后,您必须查看从视图更改并包含在由实体控制的对象中的每个值。//POST:/SubnetSettings/Edit1/5[HttpPost][ValidateAntiForgeryToken]publicActionResultEdit1([Bind(Include="Id,Name,fDialUp,fPulse,fUseExternalGSMModem,fGsmDialUp,bUploadMethodId")]SubnetSettingssubnetsettings){ModelifState.IsValid){//通过id从base中检索SubnetSettingsobjFromBase=templateDb2.GetById(subnetsettings.Id);//这会将subnetsettings的所有属性放入objFromBaseFunctionConsist(objFromBase,subnetsettings)templateDb2.Save(objFromBase);//模板Db2。保存(子网设置);返回RedirectToAction("索引");}返回视图(子网设置);为消除错误,我在更新之前使用AutoMapper将视图模型对象复制到基础对象中。类别categoryFromBase=Repository.GetById(categoryFromViewModel.Id);映射器.CreateMap();Mapper.Map(categoryFromViewModel,categoryFromBase);Repository.Save(categoryFromBase);我不确定以下行是否符合您的意图:Mapper.Map(categoryFromViewModel,categoryFromBase);我想下面就是你想要的:以上是C#学习教程:attachanentityoftypefailedbecauseanotherentityofsametypealreadyhasthesameprimarykeyvalue.如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注—CategorycategoryFromBase=Mapper.Map(categoryFromViewModel)本文收集自网络,不代表立场.如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢