여기 연습 EF의 프레임 워크를 사용하여 작은 Respository 패턴입니다.
그것은 다음과 같을 수 있습니다 :
이
interface IRepository<T> where T : class
{
IEnumerable<T> FindAll(Expression<Func<T, bool>> exp);
T FindSingle(Expression<Func<T, bool>> exp);
// And many more!
}
이 인터페이스를 구현하는 추상적 인 '저장소'클래스를 만들기 : 우리는 지금 ModelClass
테이블에 대한 인터페이스를 만들 수 있습니다
class Repository<T> : IRepository<T> where T : class
{
TestDataContext _dataContext = TestDataContext(); // Would be your EF Context
public IEnumerable<T> FindAll(Expression<Func<T, bool>> exp)
{
_dataContext.GetTable<T>().Where<T>(exp);
}
public T FindSingle(Expression<Func<T, bool>> exp)
{
_dataContext.GetTable<T>().Single(exp);
}
// And many more!
}
/객체 구현 우리 'IRepository'그리고 추상 'Repository'클래스를 확장하고 'IModelClassInterface'를 구현하는 구체적인 클래스 :
interface IModelClassRepository : IRepository<ModelClass>
{
}
와 일치하는 저장소를 구현 :
class ModelClassRepository : Repository<ModelClass>, IModelClassRepository
{
}
나는 당신에게 유연성을 많이뿐만 아니라 당신이 가지고있는 모든 작은 개체를 제어 할 수있는 충분한 힘을주기 때문에이 방법을 사용하는 것이 좋습니다 것입니다.
그 방법을 호출하면 그런 식으로 아주 쉽게 될 것입니다 :
ModelClassRepository _repo = new ModelClassRepository();
_repo.Find.Where(something => something.IsRed && something.IsBig)
예, 당신이 어떤 일을해야 함을 의미하지만, 당신이 나중에 데이터 소스를 변경할 쉽게 지옥이다.
원하는 데이터 제공자로 EF 프레임 워크를 전환 할 수도 있습니다. XML, db4o 또는 평범한 구형 Txt 여야합니다.
리포지토리 필자의 의견으로는 좋은 데이터베이스 추상화 도구 외에도 패턴을 사용해야한다. –
그래, 저장소 패턴을 사용하여 코드가 특정 데이터베이스에 종속되지 않도록 유지 한 다음 Entity Framework와 같은 점잖은 orm을 사용하여 SQL 및 변경 내용 추적 처리의 어려움을 저장하십시오. – rtpHarry