2009-09-01 28 views
2

私は2つのエンティティ製品と画像を持っています。すべての画像が商品画像ではなく、画像は以下のファイルのサブクラスです。私は、製品に関連付けられていないすべての画像を見つける必要があります。私はエンティティを取得するのが初めてで、数多くのアプローチを試みました。どんなアイディアやリンクも大歓迎です。NHibernate左外部結合サブクラス

public class File 
    { 
     #region Feilds 
     public virtual int Id { get; set; } 
     public virtual string Name { get; set; } 
     public virtual Enumerations.File.FileType Type { get; set; } 
     public virtual string Extension { get; set; } 
     public virtual string Path { get; set; } 
     public virtual DateTime DateCreated { get; set; } 
     public virtual DateTime DateModified { get; set; } 
     #endregion 
    } 

public class Image : File 
{ 
    #region Fields 
    public virtual string ImageName { get; set; } 
    public virtual string Description { get; set; } 
    public virtual bool Active { get; set; } 
    public virtual DateTime DateTaken { get; set; } 
    #endregion 
} 

public class Product 
{ 
    #region Properties 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Description { get; set; } 
    public virtual decimal Price { get; set; } 
    public virtual decimal Weight { get; set; } 
    public virtual bool IsDigital { get; set; } 
    public virtual DateTime DateCreated { get; set; } 
    public virtual IList<Category> ProductCategories { get; set; } 
    public virtual IList<ProductAttribute> ProductAttributes { get; set; } 
    public virtual IList<Image> ProductImages { get; set; } 
    #endregion 
} 

答えて

4

あなたはCritiriaがないサブクエリが存在する使用することができます... ProductImageLinkは、関連テーブルである

IList<Image> images = session.CreateCriteria<Image>("img") 
     .Add(Expression.Not(Subqueries.Exists(DetachedCriteria.For<ProductImageLink>("pil") 
        .SetProjection(Projections.Constant(1)) 
        .Add(Expression.EqProperty("img.image_id", "pil.image_id"))))) 
     .List<Image>(); 

。 session.CreateCriteria(typeof演算(APP = のIList 画像:

のようなクエリを生じるはずである...魅力のように働いた

select ... from image img where not exists(select 1 from productimagelink pil where img.image_id = pil.image_id); 
+0

はにそれを少しリファクタリングする必要がありました.File.Image)、 "img") .Add(Subqueries.Exists(DetachedCriteria.For ( "pi") .SetProjection(Projections.Constant(1)) 。 List ();追加(Expression.EqProperty( "img.Id"、 "pi.Image")))))) – J2D2

+1

また、Fluent NHibernate Criteriaの優れたリソース/ドキュメントは何ですか? – J2D2

+0

ああ、私は最後にリストを忘れてしまった。流暢についてはわかりませんが、私は通常の休止状態に入るのはわずか1ヶ月です。私は、Fluentがhbm.xmlマッピングファイルを克服していると思っていました。 – dotjoe

関連する問題