我是Fluent NHibernate的新手。
我有许多关系的以下映射。
如何使用queryover编写查询,以便在产品表中不存在产品但在ProductLink表中可用时带回记录?由于某种原因,数据不合适,因为它是遗留系统。所以不想忽略不是产品表的记录。
有谁能帮助我如何实现这个目标?
Product productAlias = null;
Asset assetAlias = null;
var query = Session.QueryOver(() => assetAlias);
//Condn1: must be linked to a Product number
query.Inner.JoinAlias(() => assetAlias.Products, () => productAlias);
var result = query
.Skip(pageIndex * pageSize)
.Take(pageSize)
.Future<Asset>();
资产
public AssetMap()
{
Table("ASSET_INFO");
Id(x => x.Id).GeneratedBy.Assigned().Column("MAT_ID");
Map(x => x.Title);
HasManyToMany(x => x.Products)
.Table("PROD_LINK")
.AsBag()
.ParentKeyColumn("MAT_ID")
.ChildKeyColumn("PROD_NO")
.Cascade.All()
.LazyLoad();
}
产品
public ProductMap()
{
Table("PROD_INFO");
Id(x => x.Id).GeneratedBy.Assigned().Column("PROD_NO");
Map(x => x.Name).Column("PROD_NM");
HasManyToMany(x => x.Assets)
.Table("PROD_LINK")
.ParentKeyColumn("PROD_NO")
.ChildKeyColumn("MAT_ID")
.Inverse()
.LazyLoad();
}
PRODUCTLINK
public class ProductLinkMatMap : ClassMap<ProductLinkMat>
{
public ProductLinkMatMap()
{
Table("PROD_LINK");
CompositeId().KeyReference(x => x.Asset, "MAT_ID")
.KeyReference(x => x.Product, "PROD_NO");
}
}
答案 0 :(得分:0)
正如您自己指出的那样,产品应该存在,而且PROD_LINK上的PROD_NO应该是您数据库中的fk,您的问题将不存在..
在您的情况下,您只需查询链接表并加入资产:
return Session.QueryOver<ProductLinkMat>(() => productLinkAlias)
.JoinQueryOver(pl => pl.Asset, () => assetAlias, JoinType.InnerJoin)
.Skip(pageIndex*pageSize)
.Take(pageSize)
.Future<Asset>();