1

최근에 DbContext 모델을 mockable로 만들도록 요청했습니다.DbSetT 대 IDbSet <T>

는하지만, 현재 다음과 같이 정의된다 :

public MyDbContext : DbContext 
{ 
    public DbSet<Employee> Employees {get;set;} 
} 

내가 생각 그것은 추상적에에 : 내 MyDbContext 구현에 IDbSet와 DbSet을 교환하는 경우

public interface IMyDbContext 
{ 
    IDbSet<Employee> Employees {get;set;} 
} 

public MyDbContext : DbContext, IMyDbContext 
{ 
    IDbSet<Employee> Employees {get;set;} 
} 

가 난 아무것도 잃을합니까?

답변

1

모의 객체와 실제 데이터베이스 객체가 동일한 인터페이스를 공유해야한다고 생각합니다. 그렇게하면 클라이언트에 영향을 미치지 않고 데이터베이스 구현을 바꿀 수 있습니다. 조롱도 쉽습니다. Aspect 지향 프로그래밍이 더 쉽습니다. 나는 좋은 이유가 있다고 생각할 수 없다. 모두 인터페이스로 시작해야한다.

+2

DbSet에는 IDbSet에서 노출되지 않는 몇 가지 메서드가 있습니다. 내 DbContext 클래스 정의에서 IDbSet을 사용하면 얼마만큼 느슨한 지에 관심이 있습니다. 이것은 디자인 패턴 1보다는 EF 특정 질문입니다. –

관련 문제