【发布时间】:2014-10-27 12:15:29
【问题描述】:
在我的 MVC 应用程序中,我一直在为 DAL 使用存储库模式。
现在,当我选择一个实体记录并更新实体字段值并执行更新操作时,出现以下错误。
附加“DAL.User”类型的实体失败,因为另一个实体 相同类型的已经具有相同的主键值。这个可以 使用“附加”方法或设置状态时发生 如果图中的任何实体具有,则实体为“未更改”或“已修改” 键值冲突。这可能是因为一些实体是新的并且 尚未收到数据库生成的键值。在这种情况下使用 'Add' 方法或 'Added' 实体状态来跟踪图形和 然后将非新实体的状态设置为“未更改”或“已修改”为 适当的。"} System.Exception
以下是存储库的东西:
public void Update(TEntity entity)
{
if (_context.Entry(entity).State != EntityState.Modified)
{
_dbSet.Attach(entity);
_context.Entry(entity).State = EntityState.Modified;
}
}
调用如下: 在 Bussines 图层库中: 经理类:
private readonly IUnitOfWork _unitOfWork;
private IRepository <User , int> UserRepository
{
get
{
return _unitOfWork.GetRepository<AccountUser, int>();
}
}
public void UpdateUserEntity(UserDTO u)
{
try
{
User model = new User ();
UserRepository.Update(Mapper.Map(u, model));
_unitOfWork.SaveChanges();
}
catch (Exception ex)
{
throw;
}
}
请指导我如何解决上述错误。
【问题讨论】:
-
Update() 方法的 Tentity 参数从何而来?它是您从数据库中读取、修改并正在尝试保存回数据库的对象吗?或者它是通过将数据发布到应用程序中的某个 Web 端点而创建的模型对象?
-
请用管理层的东西找到更新的问题。
标签: asp.net-mvc entity-framework repository-pattern data-access-layer