如何修复错误...
更新记录显示此错误时:
显示错误:{“附加“DomainClass.WorkshopReport”类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到生成的数据库关键值。在这种情况下,请使用“Add”方法或“Added”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“Unchanged”或“Modified”。"}
域类:
namespace DomainClass
{
public class WorkshopReport
{
public int Id { set; get; }
public int UserId { set; get; }
public int? ManagerIdConfirm { set; get; }
public bool? ManagerConfirmState { set; get; }
public DateTime? ManagerConfirmDateTime { set; get; }
public int? SuperviderIdConfirm { set; get; }
public bool? SuperviderConfirmState { set; get; }
public DateTime? SuperviderConfirmDateTime { set; get; }
public string ReportNumber { set; get; }
public string Shift { set; get; }
public string ShiftWork { set; get; }
public DateTime ShiftDate { set; get; }
public string ShiftPersennel { set; get; }
public string Type { set; get; }
public DateTime SubmitDateTime { set; get; }
}
}
接口存储库:
namespace InterfaceRepository
{
public interface IWorkshopReportRepository
{
IQueryable<WorkshopReport> Get();
bool Save();
bool Add(WorkshopReport newValue);
bool Delete(WorkshopReport deleted);
bool Edit(WorkshopReport updated);
IQueryable<WorkshopReport> FindById(int Id);
IQueryable<WorkshopReport> Search(string ReportNumber);
}
}
存储库层:
namespace RepositoryLayer
{
public class WorkshopReportRepository:IWorkshopReportRepository
{
public CMSDataContext _ctx;
public WorkshopReportRepository(CMSDataContext ctx)
{
_ctx = ctx;
}
public IQueryable<WorkshopReport> Get()
{
return _ctx.WorkshopReports;
}
public bool Save()
{
try
{
return _ctx.SaveChanges() > 0;
}
catch (Exception ex)
{
// TODO log this error
return false;
}
}
public bool Add(WorkshopReport newValue)
{
try
{
_ctx.WorkshopReports.Add(newValue);
return true;
}
catch (Exception ex)
{
// TODO log this error
return false;
}
}
public bool Delete(WorkshopReport deleted)
{
try
{
_ctx.WorkshopReports.Remove(deleted);
return true;
}
catch (Exception ex)
{
// TODO log this error
return false;
}
}
public bool Edit(WorkshopReport updated)
{
try
{
_ctx.Entry(updated).State = System.Data.Entity.EntityState.Modified;
return true;
}
catch (Exception ex)
{
// TODO log this error
return false;
}
}
public IQueryable<WorkshopReport> Search(string Value)
{
return _ctx.WorkshopReports.Where(i => i.ReportNumber.Contains(Value));
}
public IQueryable<WorkshopReport> FindById(int Id)
{
return _ctx.WorkshopReports.Where(i => i.Id == Id);
}
}
}
车间控制员:
public ActionResult Edit(WorkshopReport value, FormCollection formvalue)
{
try
{
value.ShiftDate =
_calenderRepository.ConvertPersianToEnglishFormat(formvalue["ShiftDate"].ToString());
value.SubmitDateTime=DateTime.Now;
value.Type = internalType;
value.UserId= _userRepository.FindByEmail(User.Identity.Name).Id;
if (_workshopReportRepository.Edit(value))
{
_workshopReportRepository.Save();
TempData["Success"] = "Updated";
}
}
catch (Exception)
{
TempData["Error"] = "Try again...";
}
return RedirectToAction("Index", "WorkshopReport", new { type = internalType });
问题就这样解决了。
public bool Edit(WorkshopReport updated)
{
try
{
var local = _ctx.Set<WorkshopReport>()
.Local
.FirstOrDefault(f => f.Id == updated.Id);
if (local != null)
{
_ctx.Entry(local).State = EntityState.Detached;
}
_ctx.Entry(updated).State = System.Data.Entity.EntityState.Modified;
return true;
}
catch (Exception ex)
{
// TODO log this error
return false;
}
}
错误: 其他信息:附加“实体”类型的实体失败。客户”,因为另一个相同类型的实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则使用“附加”方法或将实体的状态设置为“未更改”或“修改”时可能会发生这种情况。这可能是因为某些实体是新的并且没有收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体来跟踪图,然后根据需要将非新实体的状态设置为“未更改”或“修改”。 我的代码: 我是这
让我快速描述一下我的问题。 我有5个客户的5个数据库,每个数据库都有一个名为SubnetSettings的表。 我已经创建了一个下拉列表来选择一个客户,并将显示属于所选客户的SubnetSSet表,并允许我创建、编辑和删除。 我可以毫无问题地创建、删除,但当我想编辑数据时,它会带来错误: /运输管理系统应用程序中的服务器错误。 附加“CFS”类型的实体。领域实体。SubnetSettings“失败
错误消息:附加类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。 问题:我如何以类似于下面代码中AttachActivity方法所示的方式附加实体? 我必须假设上面错误消息的“另一个实体”部分指的是内存中存在但超出范围的对象(?)。我之所以注意到这一点,是因为我尝试附加的实体类型的DBSet的本地属性返回零。 我有理由相信实体不存在于上下文中,因为我遍历代码并在创建上下文时观察上下文。实
错误消息: 正在附加“FaridCRMData”类型的实体。模型。“Customer”失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的 我的代码: FactorService. BaseService.cs:
简而言之,在发布包装器模型并将一个条目的状态更改为“已修改”期间引发异常。更改状态之前,状态设置为“已分离”,但调用Attach()会引发相同的错误。我正在使用EF6。 请在下面找到我的代码(型号名称已更改以便于阅读) 模型 控制器 如上图所示 引发异常: 附加类型为“A”的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实
我的WebApi应用程序有一个小问题。当我将新实体添加到我的数据库时,会出现这个问题。 实体: 要在其中向数据库中添加新赌注实体的代码: 在此位置,将我的实体添加到DB中(DB:我的SQL) 调用save方法时,代码会引发以下异常: 附加“WebCar. Domain. Entities. Lot”类型的实体失败,因为另一个相同类型的实体已经具有相同的主键值。如果图形中的任何实体具有冲突的键值,则