내가 저장소 패턴을 사용하여 MVC 프로젝트를하고있는 중이 야 개체 및저장소 패턴 일반 쓰기 저장소 문제 - 상태 관리자 문제
public abstract class WriteRepository<TContext> : IWriteRepository
where TContext : DbContext, new()
{
private readonly TContext _context;
protected TContext Context { get { return _context; } }
protected WriteRepository()
{
_context = new TContext();
}
public TItem Update<TItem>(TItem item, bool saveImmediately = true) where TItem : class, new()
{
return PerformAction(item, EntityState.Modified, saveImmediately);
}
public TItem Delete<TItem>(TItem item, bool saveImmediately = true) where TItem : class, new()
{
return PerformAction(item, EntityState.Deleted, saveImmediately);
}
public TItem Insert<TItem>(TItem item, bool saveImmediately = true) where TItem : class, new()
{
return PerformAction(item, EntityState.Added, saveImmediately);
}
public void Save()
{
_context.SaveChanges();
}
protected virtual TItem PerformAction<TItem>(TItem item, EntityState entityState, bool saveImmediately = true) where TItem : class, new()
{
_context.Entry(item).State = entityState;
if (saveImmediately)
{
_context.SaveChanges();
}
return item;
}
public void Dispose()
{
_context.Dispose();
}
}
을 다음과 같이 내가 내 DB에 하나의 필드를 업데이트하고 싶었 핵심 쓰기 저장소가 내가하고 있었는데 작업 방법과 내가 좋아하는 그 값을 업데이트하기 전에 모든 것을 얻을 내가 이 동일한 키를 가진 개체가 이미 ObjectStateManager 존재 "라는 오류를 얻고 그렇게
public ActionResult UpdateTenant(string id) { Tenant model = new Tenant(); model = _TenantServices.GetItemById(Guid.Parse(id)); model.IsLoginEnabled = true; _TenantServices.Update(model); return RedirectToAction("ViewDetails", new { id = model.TenantId }); }
아래 T 그는 ObjectStateManager 같은 키를 가진 여러 개체를 추적 할 수 없습니다. "
나는
public Tenant GetItemById(Guid id)
{
return Context.Tenants.AsNoTracking().Where(t => t.TenantId == id).FirstOrDefault();
}
나는이 문제를 해결하는 방법에 어떤 아이디어를 다음과 같이 데이터를 검색 할 수 AsNoTracking을 사용하고?
@HenkHolterman이 줄에 오류가 발생했습니다. _context.Entry (item) .State = entityState; 그냥 var 모델 = _TenantServices.GetItemById (Guid.Parse (id));에 할당해야합니다. ? – sani
@HenkHolterman 제가 게시 한 코드에 아무런 문제가 없다고 언급했듯이, Tenant Repository 클래스에 문제가있었습니다. – sani