Entity Framework를 사용하여 데이터베이스에 액세스하는 웹 API 프로젝트에서 LINQ를 사용하고 있습니다. 스 캐 폴딩을 사용하여 API 컨트롤러를 만들었습니다.Linq 식의 메서드 사용
웹 API가 EF 모델 클래스를 노출하지 않도록 대신 DTO를 사용합니다. 나는 DTO를 사용하기 위해 컨트롤러 메소드를 수정했고, 특정 엔티티의 모델 클래스와 DTO 사이의 값을 복사하는 "Translate"메소드를 가지고 있으며, 클래스 내의 여러 메소드에서이를 사용합니다.
이 게시물에서는 FirstName, LastName, MiddleName이라는 세 가지 속성을 가진 간단한 Person 클래스를 사용하고 있습니다. 당신이 볼 수있는 리팩토링 기회로 아래의 LINQ 표현의 번역 메소드를 호출하여이있다으로
public IQueryable<PersonDto> GetPersons()
{
var personDtos = from p in db.Persons
order by p.LastName, p.FirstName
select new PersonDto()
{
FirstName = p.FirstName,
LastName = p.LastName,
MiddleName = p.MiddleName
};
return personDtos;
}
private PersonDto Translate(Person p)
{
if (person == null)
return null;
return new PersonDto()
{
FirstName = p.FirstName,
LastName = p.LastName,
MiddleName = p.MiddleName
}
}
는 :
public IQueryable<PersonDto> GetPersons()
{
var personDtos = from p in db.Persons
order by p.LastName, p.FirstName
select Translate(p);
return personDtos;
}
이 좋은 것 같다 내가 그것을 실행하는 경우를 제외하고, 나는 예외를 얻을 : 엔티티에
는LINQ '번역'
이 작품을 만들 수있는 방법이 있나요을하는 방법을 인식하지 못하는 이유는 무엇입니까? 우리의 데이터 모델에있는 몇몇 클래스는 꽤 많은 프로퍼티를 가지고 있기 때문에 가능한 경우 Translate 메소드를 호출하는 것이 좋다.
그것은 예 db.Persons.Where (...)을 위해 사용하기 매우 쉽게, myModel에 엔티티를 전송하는 AutoMapper를 사용하는 투사, 내가 역자 주 사용하는 것이 좋습니다. ProjectTo(). ToList(). –