2009-09-01 54 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不存在子查詢......

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>(); 

哪裏ProductImageLink是關聯表。

應導致查詢像...

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

這工作就像一個魅力只好有點重構它: 的IList 圖像= session.CreateCriteria(typeof運算(APP .File.Image), 「IMG」) 。新增(Expression.Not(Subqueries.Exists(DetachedCriteria.For ( 「PI」) .SetProjection(Projections.Constant(1)) 。 Add(Expression.EqProperty(「img.Id」,「pi.Image」)))))。List (); – J2D2 2009-09-10 12:06:32

+1

什麼是Fluent NHibernate Criteria的優秀資源/文檔? – J2D2 2009-09-10 12:07:31

+0

哦,是的,我在最後忘了列表。對Fluent不太確定,我只有一個月進入正常的休眠狀態。我認爲Fluent是關於克服hbm.xml映射文件的。 – dotjoe 2009-09-10 13:37:20