sch*_*eck 1 c# asp.net-mvc entity-framework repository asp.net-mvc-4
我有一个通用存储库:
public class GenericRepository<TEntity> : AbstractRepository<TEntity>, IRepository<TEntity> where TEntity : class
{
private DbContext _context;
[...]
public GenericRepository(DbContext context)
{
_context = context;
context.Configuration.AutoDetectChangesEnabled = true;
_dbSet = _context.Set<TEntity>();
}
[...]
public void SaveChanges()
{
_context.SaveChanges();
}
[...]
public void Add(TEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
_dbSet.Add(entity);
}
[...]
public virtual void Update(TEntity entity)
{
_context.Entry(entity).State = EntityState.Modified;
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,有以下代码:
[HttpPost]
public ActionResult Edit(Project project)
{
if (ModelState.IsValid)
{
if (project.Id == 0)
{
ProjectRepository.Add(project);
}
else
{
ProjectRepository.Update(project);
}
ProjectRepository.SaveChanges();
[...]
Run Code Online (Sandbox Code Playgroud)
选择和插入工作正常,但不更新:我得到一个 InvalidOperationException(德语错误消息的英文翻译是“对象状态管理器中已经存在具有相同键的对象。对象状态管理器无法跟踪多个具有相同键的对象钥匙。”)。
我不明白,因为我是我开发机器上的唯一用户,我没有在其他地方修改记录。
知道我在这里做错了什么吗?
看看这些答案:
基本上你需要这样做:
var entity = _context.Projects.Find(project.ProjectId);
_context.Entry(entity).CurrentValues.SetValues(project);
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助。
| 归档时间: |
|
| 查看次数: |
5396 次 |
| 最近记录: |