문제

LINQ에서 SQL 쿼리로 몇 개의 열만 리턴하려고하지만 그렇게하면 예외가 발생합니다.

쿼리에서 엔티티 유형 'invision.data.employee'의 명시 적 구성

코드는 다음과 같습니다.

return db.Employees.Select(e => new Employee()
       { EmployeeID = e.EmployeeID, FirstName = e.FirstName,
         LastName = e.LastName }).ToList();

모든 것을 반환하면 JavaScript에서 사용되도록 직렬화되어야하므로 원형 참조에 대한 예외를 제외하고 열을 제한해야합니다.이 문제를 해결할 수있는 팁에 감사드립니다.

도움이 되었습니까?

해결책

기본적으로 열을 원한다면 열을 선택하십시오. 직원 엔티티를 원한다면 선택하십시오. 여기에는 중간 지점이 많지 않습니다. 나는 이것을 위해 새로운 수업을 만드는 것을 권장합니다. 왝!

이 작업을 수행:

return db.Employees
   .Select(e => new { e.EmployeeID, e.FirstName, e.LastName })
   .ToList();

다른 팁

LINQ2SQL과 싸워야했기 때문에 LINQ2SQL 엔티티 대신이 시나리오를 처리하기 위해 View Object를 사용하는 것이 좋습니다. 훨씬 쉬운 솔루션 :

return db.Employees
        .Select( e => new EmployeeView() 
        { 
            EmployeeID = e.EmployeeID, 
            FirstName = e.FirstName, 
            LastName = e.LastName 
         }).ToList();

다른 대안은 새 직원 테이블의 새 사본을 DBML 디자이너로 드래그하고 Simple Employee와 다른 이름을 지정하고 모든 관계를 삭제하고 필요없는 모든 열을 제거하는 것입니다.

저스틴,

해당 오류에 대한 설명은 다음과 같습니다.http://devlicio.us/blogs/derik_whittaker/archive/2008/04/25/linq2sql-explicit-construction-of-entity-exception.aspx

당신이 할 수있는 한 가지는 직원에서 해고하는 수업을 만드는 것입니다.

public class EmployeeProxy : Employee
{
}

그런 다음 쿼리를 수행 할 수 있습니다.

return db.Employees.Select(e => new EmployeeProxy { EmployeeID=e.EmployeeID, FirstName=e.FirstName, LastName=e.LastName }).ToList();

반면에, 결과 세트를 JavaScript로 직렬화 해야하는 경우 익명 클래스 만 사용할 수도 있습니다. 이것은 또한 작동합니다.

return db.Employees.Select(e => new { EmployeeID=e.EmployeeID, FirstName=e.FirstName, LastName=e.LastName }).ToList();

도움이 되었기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top