EF 매핑 클래스에서 탐색 속성을 "가짜"로 만들고 싶습니다.Entity Framework : 쿼리 가능 탐색 속성 "Faking"
책 ("isbn"으로 표시)과 구매 ("isbn"으로 식별)가있는 예를 고려하십시오. 책과 구입은 의도적으로 서로 직접 매핑되지 않습니다.
지금은 쿼리 가능한 형식으로 책의 모든 구매를 반환 "예약", 그래서 결국
public class Book
{
public virtual string isbn { get; set; }
public virtual string name { get; set; }
// Pseudo-code .. does not work, throws an exception
// "LINQ to Entities does not recognize the method [...], and this method cannot
// be translated into a store expression
public virtual IQueryable<Purchase> get_purchases(DbContext context)
{
return context.Purchases.Where(purchase => purchase.isbn == this.isbn);
}
}
public class Purchase
{
public virtual string isbn { get; set; }
public virtual double price { get; set; }
}
같은에 대한 확장 메서드를 작성하고 싶습니다, 내가 할 싶습니다 같은 (완전 임의 예)와 같은 임의의 쿼리
그러나 주석에 언급 된 EF/LINQ 내 확장 방법을 사용하지 수, 나의 접근 방식은 작동하지 않습니다.
이렇게 할 방법이 있습니까? 문은 단일 SQL 쿼리로 변환 할 수 있어야합니다. 불필요하게 거대한 데이터 집합을 회수하지 않으려면 .ToList()와 같은 메서드를 사용하고 싶지 않습니다.
수있는이
Expression<Func<Book, IQueryable<Purchase>>>
또는 종류의 아무것도 반환하는 함수를 만들어 사용할 수 있습니까? (내가 표현을 쓰는 데 절대적으로 끔찍하기 때문에 이것을 시도 할 수 없었습니다), 아니면 다른 접근법이 있습니까?
면책 조항 : 명시 적으로 구매 내역을 매핑하지 않는 것이 좋습니다. < -> 본즈; 질문과 관련이 없어야하지만 배경은 Floremin의 대답을 기반으로합니다 to this question
고마워요!
글쎄, 당신은 다른 질문에 대한 대답을 통해이-해석이있을 수 있습니다. isbn을 기본 키로 사용해서는 안된다는 사실은 당신이 관계를 가질 수 없다는 것을 의미하지는 않습니다. 자동 증가 (IDENTITY) int 필드 (예 : Id)와 같은 대리 키를 기반으로해야합니다. 책과 구매 사이에 관계가있을 수 있습니다.구매 엔티티에 isbn을 가질 필요가 없습니다. –
안녕하세요, 주요 문제는 실제로 책 테이블에 항목이없는 ISBN에 대한 구매를 때때로 삽입해야한다는 것입니다 (나중에 어떤 시점에서 예정). 따라서 기본 키가 무엇이든, 내가 그 경로를 따라 간다면, 테이블에 추가/중복 필드를 포함하여 임시 null 참조가 있고 테이블에 null 참조가 수동으로 업데이트된다는 것을 의미합니다. 불행히도 자체적 인 추가 문제와 복잡성이있는 해결책 – Bogey