2
我有两个类Product
和ProductDetail
一些属性(见下文)NHibernate的搜索上许多一对多的关系
我想进行搜索,在相同的查询,对Code
在Product
对象和Name
在ProductDetail
。结果应该是Product
列表。
我尝试这样做:
var search = "stringToSearch";
var list = _session.QueryOver<Product>()
.Fetch(x => x.ProductDetails).Eager.Future<Product>()
.Where(
x => x.Code.StartsWith(search) ||
x.ProductDetails.First().Name.StartsWith(search))
.ToList();
查询给我正确的结果,当搜索匹配Code
财产并与ProductDetail
, 第一条记录的Name
但我希望做的所有搜索记录ProductDetails
。
我该怎么做?
感谢,
public class Product
{
public virtual int Id { get; set; }
public virtual string Code { get; set; }
public virtual IList<ProductDetail> ProductDetails { get; set; }
}
public class ProductDetail
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual IList<Product> ProductDetails { get; set; }
}
The mapping :
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Table("Product");
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Code).Length(20).Unique().Not.Nullable();
HasManyToMany(x => x.ProductDetails)
.Cascade.All()
.Table("ProductsProductsDetails");
}
}
public class ProductDetailMap : ClassMap<ProductDetail>
{
public ProductDetailMap()
{
Table("ProductDetail");
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Name).Not.Nullable().Length(50);
Map(x => x.Description).Length(200);
HasManyToMany(x => x.Products)
.Cascade.All()
.Inverse()
.Table("ProductsProductsDetails");
}
}