【发布时间】:2025-12-30 03:35:06
【问题描述】:
让我快速描述一下我的问题。
我有 5 个客户的 5 个数据库,每个客户都有同一个表,称为 SubnetSettings。
我已经创建了一个下拉列表来选择一个客户,并将显示属于所选客户的 SubnetSetting 表,并允许我创建、编辑和删除。
我可以毫无问题地创建、删除,但是当我想编辑数据时会出现错误:
“/TMS”应用程序中的服务器错误。
附加类型为“CFS.Domain.Entities.SubnetSettings”的实体失败,因为同一类型的另一个实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到数据库生成的键值。在这种情况下,使用 'Add' 方法或 'Added' 实体状态来跟踪图形,然后将非新实体的状态适当地设置为 'Unchanged' 或 'Modified'。
这是我在控制器中的编辑
// GET: /SubnetSettings/Edit1/5
public ActionResult Edit1(short? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
SubnetSettings subnetsettings = detailView.SubnetSettings.SingleOrDefault(t => t.Id == id);
if (subnetsettings == null)
{
return HttpNotFound();
}
return View(subnetsettings);
}
// POST: /SubnetSettings/Edit1/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit1([Bind(Include = "Id,Name,fDialUp,fPulse,fUseExternalGSMModem,fGsmDialUp,bUploadMethodId")] SubnetSettings subnetsettings)
{
if (ModelState.IsValid)
{
templateDb2.Save(subnetsettings);
return RedirectToAction("Index");
}
return View(subnetsettings);
}
这是 EF 中的 Save 方法
public SubnetSettings Save(SubnetSettings subnetsettings) {
if (subnetsettings.Id == 0){
context.SubnetSettings.Add(subnetsettings);
}
else {
context.SubnetSettings.Attach(subnetsettings);
context.Entry(subnetsettings).State = EntityState.Modified;
}
context.SaveChanges();
return subnetsettings;
}
我知道很难理解其他人的代码。因此,任何推荐或建议都非常感谢。
【问题讨论】:
标签: c# entity-framework model-view-controller primary-key