ASP.NET 5 MVC 6 일반 저장소 패턴

asp.net-core asp.net-core-mvc c# entity-framework-core

문제

자습서 또는 무언가를 어디에서 찾고 있는지.

나는 새로운 MVC6 프로젝트에 MVC5에 대한 나의 일반적인 저장소 패턴을 구현하려고 노력 해왔다.

나는 최대 3 클래스 라이브러리의 설정 .Core , .Data.Service , 그러나에 문제가있어 IDBset , 내 인텔리이 그것을 좋아하지 않는 것, 내가 추가하려고 System.Data (를 찾을 수 없습니다 운이없이하지만 엔티티 프레임 워크 (6) ... 혼란 스러움).

Google 로밍을 마친 후 여기서 질문하기로 결정했습니다. 올바른 방법으로 자습서가 있습니까? 아니면 누군가가 매우 간단한 MVC6 일반 저장소 패턴을 던질 수 있습니까? 나는 그것을하는 오래된 방법이 바뀔지도 모른다는 느낌이 들었다. 단지 위선적 인 DI 이외의 정보를 찾지 못하는 것 같다.

코드 : 내 IDbContext 인터페이스

IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity;

Entity Framework 때문에 IDbSet 이 보이지 IDbSet ? 나는 그것에 대한 언급을 가지고있다.

문제는 엔티티 프레임 워크에 대한 사용 통계를 찾을 수 없습니다.

최신 정보:

Entity 프레임 워크 8.0.0 베타 사용. 모든 IDbset 참조를 DbSet으로 변경하십시오.

그러나 내 일반 저장소에서 어디로 같은 방법을 사용하여 :

IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity;

"찾기"는 방법이 아닙니다. 그리고 나는 더 이상 "DbEntityValidationException"을 내 catch에 사용할 수 없습니다.

수락 된 답변

Entity Framework 7 Beta 8에는 Find 메서드가 제공되지 않습니다. 아마 최종 릴리즈 전에 추가 될 것입니다.

그 때까지 FirstOrDefault 메서드를 사용해야합니다.

public virtual T GetById(int id)
{
    return this.Entities.FirstOrDefault(x => x.Id == id);
}

Id 속성은 인식되지 않으므로 인터페이스를 추가하고 저장소에서이를 구현해야합니다.

public virtual T GetById(int id)
{
    return this.Entities.FirstOrDefault(x => x.Id == id);
}

public virtual T GetById(int id)
{
    return this.Entities.FirstOrDefault(x => x.Id == id);
}

github 문제 목록에서 . EF7은 자동 데이터 유효성 검사를 수행하지 않으므로 DbEntityValidationException이 EF7에 존재하지 않습니다.

메모 : EF7은 EF의 업데이트가 아니라 다시 작성됩니다.


인기 답변

firste의 대답과는 달리 FirstOrDefault를 사용하여 자신감을 가지지 않아 SELECT TOP 1 [...]이 생성됩니다.

대부분의 경우 ID는 고유해야하지만 때로는 나쁜 설계된 Db를 가질 수 있습니다. 그렇지 않은 경우 응용 프로그램에서 예외를 throw해야합니다.

따라서 EF7에서 Find () 메서드를 구현할 때까지는 SingleOrDefault ()를 사용하는 것이 좋습니다.

public virtual T GetById(int id)
{
    return this.Entities.SingleOrDefault(x => x.Id == id);
}

이와 같이 응용 프로그램 컨트롤을 추가하여 ID가 ​​고유해야하며 Db가 올바르게 수행되면 아무런 문제가 없는지 확인합니다. 귀하의 비즈니스에 또 다른 수준의 보안을 추가합니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.