테이블에 정의 된 관계가없는 Product
테이블이 있습니다. Product
POCO에 Translation
속성을 [NotMapped]
으로 추가했습니다.Entity Framework - 하나의 쿼리 내에서 '위조 된'탐색 속성 가져 오기
는 ** 내 제품 POCO : **
public partial class Product
{
public int ProductID { get; set; }
public double Price { get; set; }
[NotMapped]
public virtual Translation Translation{ get; set; }
/** Other properties **/
}
나는 또한 Translation
테이블을 가지고 있고, 이름을 말한다처럼, 모든 번역이 포함되어 있습니다. 이제 오른쪽 translation
은 LanguageID
, TranslationOriginID
및 ValueID
의 세 가지 매개 변수를 제공하여 데이터베이스에서 검색 할 수 있습니다.
LanguageID
: 사용자가 정의한 언어의 ID.TranslationOriginID
: 단순히 '번역하려는 엔티티가있는 테이블이 무엇입니까?' 즉,이 ID는 가능한 모든 출처를 포함하는 다른 테이블을 가리 킵니다. 원점은translation
을 가질 수있는 테이블/엔티티입니다. 예 :이 예의 원점은Product
입니다.ValueID
: 이것은 내가translation
을 원하는 엔티티의 ID입니다.
내 Translation
POCO : I가 실행
List<Product> products = context.Products.ToList();
foreach (Product product in products)
{
product.Translation = context.Translations.FirstOrDefault(y => y.LanguageID == 1 && y.TranslationOriginID == 2 && y.ValueID == product.ProductID);
}
당신이 볼 수 마찬가지로 : 나는 그들의 Translation
모든 제품을 검색 할
public partial class Translation
{
public int TranslationID { get; set; }
public byte LanguageID { get; set; }
public short TranslationOriginID { get; set; }
public int ValueID { get; set; }
public string TranslationValue { get; set; }
/** Other properties **/
public virtual TranslationOrigin TranslationOrigin { get; set; }
public virtual Language Language { get; set; }
}
, 나는이 코드를 실행 목록에있는 모든 제품은 번역을 얻기 위해 다른 쿼리를 사용합니다.
내 질문 : 모든 제품과 해당 번역을 하나의 쿼리로 가져올 수 있습니까? 또는 product
을 선택할 때 자동으로 올바른 번역을 검색합니까?
나는 이미 .Include()
과 .Select()
을 시도했다. 그것은 작동하지 않았다, 아마 내가 뭔가 잘못한거야? this method도 시도했지만 작동하지 않았습니다.
Btw, .NET Framework 4 (Entity Framework 4.4)와 함께 Entity Framework 5를 사용합니다.
미리 감사드립니다.
인사말 Loetn
Ed Chapel에 의해 주어진 예와 대답
는, I는 해결책을 제공했다.
return (from p in context.Products
join t in context.Translations
on new
{
Id = p.ProductID,
langId = languageID,
tOriginId = translationOriginID
}
equals new
{
Id = d.ValueID,
langId = d.LanguageID,
tOriginId = d.TranslationOriginID
}
into other
from x in other.DefaultIfEmpty()
select new
{
Product = p,
Translation = x
})
.ToList().ConvertAll(x => new Product()
{
Code = x.Product.Code,
Translation = x.Translation,
/** Other properties **/
});
당신이 옳았습니다. 당신이 만든 유일한 실수는 join 문에서 여러 매개 변수를 사용하는 것입니다. 올바른 솔루션으로 편집 된 게시물을 볼 수 있습니다. – Loetn