2013-06-21 4 views
0

ASP.Net에서 WebAPI를 사용하여 Entity Framework 객체에 대한 액세스를 허용했습니다. 내가 겪고있는 문제는 최종 고객이 사용할 수 있도록 개체를 사용자 지정 POCO로 변환하는 것입니다. Entity Framework 개체를 사용자 지정 POCO로 변환해야합니다.ASP.Net WebAPI IIQueryable POCO 객체로 변환

우리의 SQL 데이터베이스의 예를 들어 우리는 다음과 같은 속성

와 Tbl_Person이 같은 특성을 가진 엔티티 프레임 워크 클래스 사람에 FIRSTNAME SureName 생년월일 (DateOfBirth) AnnualSalary

이 테이블 맵을 PersonID.

이 이름 나이 SalaryRange

나는 또한 JSON & XMLoutput으로 현재의 기능을 유지하려면에게 PersonID : 는하지만은 최종 고객이 액세스 할 때이 같은 POCO를 얻을 수 있도록 속성을 변경하려면 OData 쿼리를 허용합니다. 나는 '수집'이 하나로, OData 쿼리에 내 데이터베이스 컨텍스트 applyto 시도하고있다 그러나이 작업 될 것 같지 않습니다 올바르게 아래 코드 예제 참조하십시오

1 : 나는 두 가지 문제가

Imports System.Net 
Imports System.Web.Http 
Imports System.Data.Entity 

Public Class PeopleData 
    Inherits DbContext 

    Public Property People() As DbSet(Of Person) 

End Class 

Public Class Person 
    Public Property PersonID() As Integer 
    Public Property FirstName() As String 
    Public Property SureName() As String 
    Public Property DateOFBirth() As Date 
    Public Property AnnualSalary() As Integer 
End Class 

Public Class PeopleController 
    Inherits System.Web.Http.ApiController 

    Private db As New PeopleData 

    Function GetPeople(query As OData.Query.ODataQueryOptions(Of Person)) As IQueryable(Of apiPerson) 

     Dim pep = query.ApplyTo(db.People) 
     Dim resPep As New List(Of apiPerson) 
     For Each p In pep 
      resPep.Add(New apiPerson(p)) 
     Next 
     Return resPep.AsQueryable 
    End Function 

End Class 

Public Class apiPerson 

    Public Sub New(ByVal p As Person) 
     PersonID = p.PersonID 
     Name = p.FirstName & " " & p.SureName 
     Age = Date.Now.Year - p.DateOFBirth.Year 
     If p.AnnualSalary > 15000 Then 
      SalaryRange = "High" 
     Else 
      SalaryRange = "Low" 
     End If 
    End Sub 
    Public Property PersonID() As Integer 
    Public Property Name() As String 
    Public Property Age() As Integer 
    Public Property SalaryRange() As String 

End Class 

을 API 도움말 페이지가 채워지지 않고 '샘플을 사용할 수 없습니다.'라는 오류 만 발생합니다. 나는 동적 도움말 페이지 &을 좋아해서 코드 주석을 받았다. 이것은 문서를 관리하는 정말 빠르고 쉬운 방법이다. ApiPerson과 어떻게 일할 수 있습니까?

2)/api/people을 사용하면 $ filter = Age eq 29 오류가 발생합니다. 'MvcApiPeople.Person'유형에 'Age'속성이 없습니다. LINQ 쿼리가 '사람'에게 전달되었으며 그 속성은 존재하지 않지만 실제 데이터베이스 개체의 다른 속성에 매핑하기 위해 어떻게 '번역'쿼리를 사용할 수 있습니까?

+0

"제대로 작동하지 않는 것 같습니다"에 대해 자세히 설명해 줄 수 있습니까? 예상되는 결과는 무엇이며 실제 결과는 무엇입니까? –

+0

안녕하세요 RaghuRam Nadiminti, 제가 극복하고자하는 두 가지 문제에 대한 세부 사항을 추가했습니다. –

답변

1

액션 선언은

Function GetPeople(query As OData.Query.ODataQueryOptions(Of apiPerson)) As IQueryable(Of apiPerson) 

즉 쿼리 매개 변수 유형 ODataQueryOptions (Of apiPerson)하지 ODataQueryOptions (Of Person)이어야해야한다. 질문 1에 대해서는

0

다양한 솔루션을 가지고 놀고 난 후에 API에서 사용할 수있는 정보를 제어하는 ​​가장 간단한 방법을 결정했으며 데이터 계약 주석이있는 데이터베이스 수준 또는 클래스 수준의 데이터를 iQueryable로 제어 할 수 있습니다.

실제로 최종 고객에게 표시 할 데이터를 렌더링하기 위해 데이터베이스에 뷰를 만들었습니다.필자는 이것이 성능 및 구현 속도면에서 가장 좋은 이점이라고 생각했습니다.

제안을 주신 모든 분들께 감사드립니다.