0

Fluent NHibernateを新しくしました。C#流暢なNHibernateの照会多くの関係からリンクテーブルのレコードを照会する方法

私は多対多の関係のために以下のマッピングを持っています。

製品が製品表に存在しないがProductLink表で使用可能な場合にレコードを戻すために、queryoverを使用して問合せを作成する方法はありますか?何らかの理由で、レガシーシステムであるためデータが適切ではありません。だから、製品テーブルではないレコードを無視したくない。

誰でもこの達成方法を教えてください。

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私たちの問題は、あなたのケースでは。..

存在しないだろう、あなたは単にlinktableを照会し、資産に参加することができます。

return Session.QueryOver<ProductLinkMat>(() => productLinkAlias) 
       .JoinQueryOver(pl => pl.Asset,() => assetAlias, JoinType.InnerJoin) 
       .Skip(pageIndex*pageSize) 
       .Take(pageSize) 
       .Future<Asset>(); 
関連する問題