내 기타 question about mocking DbContext.Set의 발 뒤꿈치를 따라 가면서 EF Code First를 조롱하는 것에 대한 또 다른 질문이 있습니다.DbEntityEntry를 조롱하거나 가짜로 새 DbEntityEntry를 만들 때
if (entity == null)
throw new ArgumentNullException("entity");
Context.GetIDbSet<T>().Attach(entity);
Context.Entry(entity).State = EntityState.Modified;
Context.CommitChanges();
return entity;
컨텍스트 내 자신의 DbContext의 인터페이스입니다 :
는 지금과 같은 내 업데이트하는 방법이있다.
내가하는 것입니다 실행하고있어 문제는 내가 어떻게
Context.Entry(entity).State
을 처리 않습니다.
나는이 코드를 밟았으며, 실제 라이브 DbContext를 컨텍스트 인터페이스 구현으로 사용할 때 작동합니다. 그러나 가짜 컨텍스트를 거기에 넣을 때 어떻게 처리해야할지 모르겠다.
DbEntityEntry 클래스에 대한 생성자가 없으므로 가짜 컨텍스트에서 새 클래스를 만들 수 없습니다.
누구나 CodeFirst 솔루션에서 DbEntityEntry를 조롱하거나 가짜로 만들었습니까?
또는 상태 변경을 처리하는 더 좋은 방법이 있습니까?
interface ISalesContext
{
IDbSet<T> GetIDbSet<T>();
void SetModified(object entity)
}
class SalesContext : DbContext, ISalesContext
{
public IDbSet<T> GetIDbSet<T>()
{
return Set<T>();
}
public void SetModified(object entity)
{
Entry(entity).State = EntityState.Modified;
}
}
그래서 대신 구현을 호출하는, 당신은 단지 SetModified
전화 : 그냥 다른 경우 같은
고마워요 ... 내가 필요하지 않을 때 "내가 어떻게 항목을 조롱합니까?"라고 생각하는 마음이 들었습니다. 수정 된 기능을 조롱 할 필요가 있습니다. 지금은 거의 당황 스럽습니다. – taylonr
개발자가 "멋쟁이!" 순간 :-) –
+9000 방금 내부 ctors 및 내부 클래스로 수업을 조롱하는 방법을 연구하는 데 시간을 보냈습니다. 나는 매 턴마다 방해 받고 있었고 그 해결책은 너무 간단합니다! asker와 answerer 모두에게 감사합니다. –