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");
}
}