Fluent Nhibernate-基于多对多关系的值搜索项目
希望这个问题的标题有意义,如果没有,下面是我的阐述 有了两个实体,品牌和分支机构,以及它们之间的多对多关系,我希望能够使用查询找到品牌名称为变量值的分支机构 这是附属类和附属映射类(当然是简化的)Fluent Nhibernate-基于多对多关系的值搜索项目,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,希望这个问题的标题有意义,如果没有,下面是我的阐述 有了两个实体,品牌和分支机构,以及它们之间的多对多关系,我希望能够使用查询找到品牌名称为变量值的分支机构 这是附属类和附属映射类(当然是简化的) 公共类附属机构 { 公共虚拟整数Id{get;private set;} 公共虚拟日期时间DateReceived{get;set;} 公共虚拟IList品牌{get;set;} 公共附属机构() { 品牌=新列表(); } } 公共类AffiliateApplicationRecordMap:Cla
公共类附属机构
{
公共虚拟整数Id{get;private set;}
公共虚拟日期时间DateReceived{get;set;}
公共虚拟IList品牌{get;set;}
公共附属机构()
{
品牌=新列表();
}
}
公共类AffiliateApplicationRecordMap:ClassMap
{
公共附属应用程序RecordMap()
{
Id(x=>x.Id).GeneratedBy.Identity();
Map(x=>x.DateReceived,“TimeStampCreated”);
HasManyToMany(x=>x.Brands)
.Cascade.All()
.ParentKeyColumn(“附属ID”)
.ChildKeyColumn(“BrandID”)
.表格(“附属公司”);
}
}
有一个名为AffiliateBrand的映射表,它提供了多对多映射
这是品牌类别和类别地图
public class Brand
{
public virtual int ID { get; private set; }
public virtual string Name { get; set; }
public virtual IList<Affiliate> Affiliates{ get; set; }
public Brand()
{
Affiliates = new List<Affiliate>();
}
public virtual void AddAffiliateApplication(Affiliate affiliate)
{
affiliate.Brands.Add(this);
Brands.Add(affiliate);
}
}
public class BrandMap : ClassMap<Brand>
{
public BrandMap()
{
Id(x => x.ID).GeneratedBy.Identity();
Map(x => x.Name);
HasManyToMany(x => x.Affiliates)
.Cascade.All()
.Inverse()
.ParentKeyColumn("BrandID")
.ChildKeyColumn("PartnerID")
.Table("AffiliateBrand");
}
}
公共级品牌
{
公共虚拟整数ID{get;private set;}
公共虚拟字符串名称{get;set;}
公共虚拟IList附属机构{get;set;}
公共品牌()
{
附属公司=新列表();
}
公共虚拟无效AddAffiliateApplication(附属公司)
{
affiliate.Brands.Add(这个);
添加(附属公司);
}
}
公共类BrandMap:ClassMap
{
公共品牌地图()
{
Id(x=>x.Id).GeneratedBy.Identity();
Map(x=>x.Name);
HasManyToMany(x=>x.0)
.Cascade.All()
.Inverse()
.ParentKeyColumn(“BrandID”)
.ChildKeyColumn(“PartnerID”)
.表格(“附属公司”);
}
}
现在我正准备用NHibernate编写这个查询:
var result = session
.CreateCriteria(typeof(Partner))
.AddOrder(Order.Asc("DateReceived"))
.Add(Restrictions.Eq("Brands.Name", brandName))
.SetMaxResults(10)
.List<Partner>();
var结果=会话
.CreateCriteria(类型(合作伙伴))
.AddOrder(Order.Asc(“DateReceived”))
.Add(Restrictions.Eq(“Brands.Name”,brandName))
.SetMaxResults(10)
.List();
现在很明显,这不起作用,我真的不认为它会起作用。我想做的是让所有的附属公司回到品牌有特定名称的地方。如何编写此查询?您需要使用CreateAlias将联接添加到条件中
var result = session
.CreateCriteria(typeof(Partner))
.AddOrder(Order.Asc("DateReceived"))
.CreateAlias("Brands", "brand")
.Add(Restrictions.Eq("brand.Name", brandName))
.SetMaxResults(10)
.List<Partner>();
var结果=会话
.CreateCriteria(类型(合作伙伴))
.AddOrder(Order.Asc(“DateReceived”))
.CreateAlias(“品牌”、“品牌”)
.Add(Restrictions.Eq(“brand.Name”,brandName))
.SetMaxResults(10)
.List();
您需要使用CreateAlias将联接添加到您的条件中
var result = session
.CreateCriteria(typeof(Partner))
.AddOrder(Order.Asc("DateReceived"))
.CreateAlias("Brands", "brand")
.Add(Restrictions.Eq("brand.Name", brandName))
.SetMaxResults(10)
.List<Partner>();
var结果=会话
.CreateCriteria(类型(合作伙伴))
.AddOrder(Order.Asc(“DateReceived”))
.CreateAlias(“品牌”、“品牌”)
.Add(Restrictions.Eq(“brand.Name”,brandName))
.SetMaxResults(10)
.List();