NHibernate левый внешний внешний подкласс - PullRequest
2 голосов
/ 01 сентября 2009

У меня есть 2 объекта продуктов и изображения. Не все изображения являются изображениями продуктов, а изображения являются подклассом файла, который ниже. Мне нужно найти все изображения, которые не связаны с продуктом. Я новичок в поиске сущностей и перепробовал множество подходов. Любые идеи или ссылки будут с благодарностью.

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
}

1 Ответ

4 голосов
/ 01 сентября 2009

Вы можете использовать подзапрос Критирия не существует ...

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