2013-07-09 5 views
1

EF 데이터베이스 우선 접근 방식과 MVC 4.5/Web API를 사용하여 웹 응용 프로그램을 만드는 가장 단순하고 최상의 방법을 찾고 있습니다. 내 응용 프로그램은 각도 프레임 워크를 사용하여 요구에 따라 json 데이터를 검색하기 위해 ajax 호출을 수행합니다.웹 프레임이 포함 된 Entity Framework 5

현재 API 호출에 대한 응답으로 과도하고 구조화되지 않은 데이터가 표시되며이를 정리하는 방법을 알고 싶습니다. 내가 얻을 것

Person 
    Id 
    Name 
    Email 
    Department : FK -> Department 

Department 
    Id 
    Name 

Jobs 
    Id 
    RequestedBy : FK -> Person 
    AssignedTo : FK -> Person 

JobHistory 
    Id 
    JobId : FK -> Jobs 

그래서, 이상적으로 나는

$http.get(/api/People) 

를 호출 할 때 :

[{Name: 'alice', Email: '[email protected]', Department: 'ABC'}, 
{Name: 'bob', Email: '[email protected]', Department: 'CDE'}] 

내 생각

응용 프로그램은 내가 같은 테이블이 작업이 너무 추적 제공 즉, 은 일반적으로입니다. 주체가 열심히로드되지만 n Person에 대한 종속성을 가진 다른 모든 테이블. 그러나 개인이 작업 중이거나 요청한 모든 작업을 얻기 위해 이러한 참조를 사용하고자 할 때가있을 것입니다.

가능하다면 T4 템플릿을 수정하는 등의 작업을하지 않아도됩니다. 그것이 영리한 동안, 그것은 매우 유연하지 않습니다. 또한 필자는 전동 공구가 주어진다는 생각을 싫어하며 사용하기 전에 회로도를 연구하고 내부를 다시 배선해야한다고 말했다. 저는 전문 개발자가 아니며 도구가 아니라 업무에 집중하기를 원합니다. Linq2Sql은 매우 좋았습니다. 물론, 내장을 수정하는 것이 정답이면, 나는 그것을 취할 것입니다.

이렇게 웹 API를 직접 사용하는 것처럼 보이기 때문에 나는 분명히 뭔가 빠져 있다고 느낍니다.

감사

편집 가능성이 내 문제의 일부를 일으키는
추가 정보. 어떤 점에서, 위의 작업을 얻기 위해, 내가 Global.asax.cs에 다음과 같은 추가 : 열망로드와

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All; 

을 순환 참조에 사람의 결과를 참조 채용에서 두 개의 필드. 위의 코드는 Json.Net이이를 직렬화 할 수있게하지만 원치 않는 데이터로 json을 채 웁니다. 솔루션은 어떻게 든 게으른 로딩으로 전환하는 것이지만 이것이 데이터베이스의 첫 번째 접근 방식으로 수행 될 수 있다고 생각하십니까?

+0

자습서 등을 모두 읽은 것으로 보입니까? 여기를 참조하십시오 : http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-withentent-framework/using-web-api-withentent-framework,- part-1 –

+0

예, 자습서가 좋습니다. 작동하지 않는 것은 아닙니다. 문제는 내가 돌아 오는 json이'{$ id : "1", $ values ​​: [{$ id : "2", Departments : {$ id : "3", Jobs : {$ id : " $ {value : [2]}, {$ id : "6", 부서 : {$ ref : "3" }, Jobs : {$ id : "7", $ values ​​: [{$ id : "8", ...' – bob

답변

1

이상하게도 데이터베이스를 처음 사용하기 위해 지연로드를 얻으려면 ConceptualEntityModel의 속성에서 "지연 적재 활성화"를 false로 설정해야했습니다.

난 다음에 위해 Application_Start

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

추가() 및 질문에 상술 한 바와 같이 PreserveReferencesHandling 제거. 그게 내 모델에서 내가 원하는 깨끗한 json을 주었다.

하나의 어려움이 여전히 남아 있지만 더 나은 응답이 없으면 해결할 것입니다. 내 PersonRepository에서 나는 다음을 사용합니다 :

public IEnumerable<Person> GetAll() { 
return db.People 
    .Include("C_Departments") 
    .AsNoTracking(); 
} 

부서와 함께 사람들을 얻으려면.불행히도 Departments 엔터티에 사람을 가리키는 탐색 속성이 있으면 부서 정보와 함께 부서의 모든 구성원을 열심히로드합니다. 즉, .Include에서 지연로드가 다시 중지됩니다.

관련 문제