NHibernate左外连接子类
我有两个实体的产品和图像。并非所有图像都是产品图像,图像是文件的子类,下面是我的实体。我需要找到所有与产品无关的图像。我不熟悉实体检索,并尝试过许多方法。任何想法或链接将不胜感激NHibernate左外连接子类,nhibernate,subclass,outer-join,Nhibernate,Subclass,Outer Join,我有两个实体的产品和图像。并非所有图像都是产品图像,图像是文件的子类,下面是我的实体。我需要找到所有与产品无关的图像。我不熟悉实体检索,并尝试过许多方法。任何想法或链接将不胜感激 public class File { #region Feilds public virtual int Id { get; set; } public virtual string Name { get; set; } public virtu
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
}
公共类文件
{
#区域场
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟枚举.File.FileType类型{get;set;}
公共虚拟字符串扩展名{get;set;}
公共虚拟字符串路径{get;set;}
公共虚拟日期时间DateCreated{get;set;}
公共虚拟日期时间日期修改{get;set;}
#端区
}
公共类映像:文件
{
#区域字段
公共虚拟字符串ImageName{get;set;}
公共虚拟字符串描述{get;set;}
公共虚拟布尔活动{get;set;}
公共虚拟日期时间DateTake{get;set;}
#端区
}
公共类产品
{
#区域属性
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟字符串描述{get;set;}
公共虚拟十进制价格{get;set;}
公共虚拟十进制权重{get;set;}
公共虚拟bool是数字{get;set;}
公共虚拟日期时间DateCreated{get;set;}
公共虚拟IList ProductCategories{get;set;}
公共虚拟IList ProductAttributes{get;set;}
公共虚拟IList ProductImages{get;set;}
#端区
}
您可以使用Critiria not exists子查询
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>();
这就像一个魔咒,必须将它重构为:IList images=session.CreateCriteria(typeof(APP.File.Image),“img”).Add(Expression.Not(subquerys.Exists)(DetachedCriteria.For(“pi”).setProjections(Projections.Constant(1)).Add(Expression.EqProperty(“img.Id”),"pi.Image"(()()).List();还有,对于Fluent NHibernate标准,什么是好的资源/文档?哦,是的,我忘了最后的列表。我不确定Fluent,我只进入常规休眠状态一个月。我认为Fluent是为了克服hbm.xml映射文件。+1你再次得到了一个接受的答案,没有经过表决。我仍然认为应该自动完成,但我显然是唯一的一个,所以我会继续投票0票被接受的答案,因为我发现了他们。:)
select ... from image img where not exists(select 1 from productimagelink pil where img.image_id = pil.image_id);