2014-01-10 2 views
1

웹 MVC5에서 webapi 컨트롤러없이 일반 MVC로 만든 웹 사이트가 있습니다.데이터 레이어에서 OData 분리하기

우리는 MVC, BusinessDataLayer의 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을 닫음으로써 작동하지 않습니다.

어떻게 테스트 할 수 있습니까?

+0

더 코드 감상 할 수 있지만, 데이터 컨텍스트는 _items입니까? – Schandlich

+0

아니요. _items는 간단한 'IEnumerable ()'을 반환하는 구현 인터페이스입니다. – YesMan85

+0

crud 메소드에서 using 문을 사용합니까? 같은 사용 (var context = new DataContext())? – Schandlich

답변

0

많은 것들을 정리하는이 기사를 보았습니다.

http://roysvork.wordpress.com/2013/06/24/is-using-odataiqueryable-in-your-web-api-an-inherently-bad-thing/

은 내가 EntitySetController 사용을 중단하고 내가 아래로 더 많이 연결할 수 있습니다 내 자신의 ODataController을 구현했습니다.

+0

그래서 어떻게 처리합니까? 이 상황에 맞게 ODataController를 어떻게 구현합니까? –

+0

http://linqtoquerystring.net/을 사용하여 OData 쿼리를 EF로 변환하여 사용했습니다. 기본적으로 데이터 레이어로 곧바로 전달하지만 좋지는 않습니다. – YesMan85

0

나는 메모리에 엔티티 데이터를 저장하기와 종료하고 다음과 같이 OData 서명을 변경 :

public class ProjectsController : ODataController 
{ 
     // GET: odata/Projects 
     [EnableQuery] 
     public IHttpActionResult GetProjects() 
     { 
      var projects = ProjectManager.GetProjects(); 
      return Ok(projects.AsQueryable()); 
     } 
} 

이 방법은 우리가 꽉에 데이터 액세스 레이어로 UI 계층이 필요하지 않습니다.

http://www.odata.org/blog/how-to-use-web-api-odata-to-build-an-odata-v4-service-without-entity-framework/

관련 문제