0

Fluent NHibernate를 처음 사용했습니다.C# Fluent NHibernate 쿼리 많은 레코드에서 많은 레코드로 레코드를 쿼리하는 방법

여러 관계에 대해 다음과 같은 매핑이 있습니다.

제품이 제품 테이블에 있지만 ProductLink 테이블에서 사용할 수없는 경우 레코드를 다시 가져 오도록 쿼리 오버를 사용하여 쿼리를 작성하는 방법은 무엇입니까? 어떤 이유로 레거시 시스템이므로 데이터가 적절하지 않습니다. 그래서 제품 테이블이 아닌 레코드를 무시하고 싶지 않습니다.

아무도 도와 줄 수 없습니까?

Product productAlias = null; 
Asset assetAlias = null; 

var query = Session.QueryOver(() => assetAlias); 

//Condn1: must be linked to a Product number 
query.Inner.JoinAlias(() => assetAlias.Products,() => productAlias);   

var result = query 
       .Skip(pageIndex * pageSize) 
       .Take(pageSize) 
       .Future<Asset>(); 

자산

public AssetMap() 
{ 
    Table("ASSET_INFO"); 

    Id(x => x.Id).GeneratedBy.Assigned().Column("MAT_ID"); 

    Map(x => x.Title); 

    HasManyToMany(x => x.Products) 
     .Table("PROD_LINK") 
     .AsBag() 
     .ParentKeyColumn("MAT_ID") 
     .ChildKeyColumn("PROD_NO") 
     .Cascade.All() 
     .LazyLoad(); 
} 

제품

public ProductMap() 
{ 
    Table("PROD_INFO"); 

    Id(x => x.Id).GeneratedBy.Assigned().Column("PROD_NO"); 

    Map(x => x.Name).Column("PROD_NM"); 

    HasManyToMany(x => x.Assets) 
     .Table("PROD_LINK") 
     .ParentKeyColumn("PROD_NO") 
     .ChildKeyColumn("MAT_ID") 
     .Inverse() 
     .LazyLoad(); 
} 

PRODUCTLINK

public class ProductLinkMatMap : ClassMap<ProductLinkMat> 
{ 
    public ProductLinkMatMap() 
    { 
     Table("PROD_LINK"); 

     CompositeId().KeyReference(x => x.Asset, "MAT_ID") 
        .KeyReference(x => x.Product, "PROD_NO"); 
    } 
} 

답변

0

당신이 자신을 지적, 제품이 존재해야하고 또한 PROD_NO PROD_LINK에 FK해야 DB에, y

return Session.QueryOver<ProductLinkMat>(() => productLinkAlias) 
       .JoinQueryOver(pl => pl.Asset,() => assetAlias, JoinType.InnerJoin) 
       .Skip(pageIndex*pageSize) 
       .Take(pageSize) 
       .Future<Asset>(); 
: 우리의 문제는

귀하의 경우에는

, 당신은 단순히 linktable를 조회하고 자산을 가입 할 수 있습니다 .. 존재하지 않을