웹 MVC5에서 webapi 컨트롤러없이 일반 MVC로 만든 웹 사이트가 있습니다.데이터 레이어에서 OData 분리하기
우리는 MVC
, Business
및 DataLayer
의 3 가지 프로젝트를 사용합니다.
는 MVC는 viewmodels 등
businesslayer는 MVC 프로젝트의 컨트롤러의 생성자에 주입되는 MVC 프로젝트 컨트롤러 뷰를 보유하고있다.
비즈니스 계층에서는 몇 가지 공통 검사가 수행되지만 대부분은 데이터베이스에 대한 CRUD를 시도합니다.
EF는 데이터 계층 프로젝트에 있습니다. 이 프로젝트는 비즈니스 계층에 다시 주입됩니다.
이렇게하면 조롱으로 각 프로젝트를 개별적으로 테스트 할 수 있습니다. 데이터 프로젝트는 DataContext
을 열고 CRUD 작업을 수행하고 연결을 닫은 다음 결과를 비즈니스 계층에 반환하며 결과를 다시 MVC 프로젝트/컨트롤러에 반환합니다.
이제 문제가 발생했습니다. 이 프로젝트는 오프라인 기능이 필요하기 때문에 변경되었으며 AngularJS + JayData를 사용하기 시작했습니다. JayData는 간단한 odata 구현을 제공하며 OData를 사용하여 프론트 엔드에 정보를 얻고 싶습니다.
새로운 OData webAPI 컨트롤러를 추가했는데 바로 API 컨트롤러에서 DataContext
을 사용하려고합니다. 그것은 테스트 할 수 없기 때문에 내가 원하는 행동이 아닙니다. 나는이처럼되기 위해 내 컨트롤러를 변환 시도 :
public IQueryable<ItemViewModel> GetItem()
{
var items = _items.Get();
return (IQueryable<ItemViewModel>) items;
}
_items.Get()
을위한 DB를 요청하는 비즈니스 계층에 전화를 할 것입니다 모든 비즈니스 계층이 ItemViewModel
로 변환하는 Items
.
OData가 열린 DataContext
을 열어야하므로 문제가 발생하지만 쿼리가 가능할 수는 있지만 지금은 DataContext
을 닫음으로써 작동하지 않습니다.
어떻게 테스트 할 수 있습니까?
더 코드 감상 할 수 있지만, 데이터 컨텍스트는 _items입니까? – Schandlich
아니요. _items는 간단한 'IEnumerable()'을 반환하는 구현 인터페이스입니다. –
YesMan85
crud 메소드에서 using 문을 사용합니까? 같은 사용 (var context = new DataContext())? – Schandlich