【发布时间】:2013-11-15 23:52:51
【问题描述】:
每当我尝试执行此查询 (QueryOver) 时,我都会收到 SqlException (The multi-part identifier "packageali1_.PackageID" could not be bound.):
var brandsFromBrandsInManufacturer2 =
session.QueryOver<Brand>(() => brandAlias)
.JoinAlias(brand => brand.Package, () => packageAlias)
.Where(
brand =>
brand.ArtificialBrand == 0
)
.And(brand => packageAlias.PackageID
.IsIn(branchPackagesProductGroupShortName.Keys))
.Select(brand => brand.BrandName,
brand => packageAlias.PackageID)
List<object[]>();
我的映射似乎有错误:
public class PackageMap : ClassMap<Package>
{
public PackageMap()
{
Table("Packages");
Id(x => x.PackageID).GeneratedBy.Identity();
Map(x => x.Aggregated).CustomType<PackageAggregation>();
References(x => x.DataEndPeriod, "DataEndPeriodID");
References(x => x.Country, "CountryID");
References(x => x.ProductGroup, "ProductGroupID");
HasMany(x => x.PackageHierarchies).KeyColumns.Add("PackageId");
HasMany(x => x.Brands).KeyColumns.Add("PackageId").Inverse();
}
}
public BrandMap()
{
Table("Brands");
CompositeId().KeyProperty(x =>x.BrandId).KeyReference(x => x.Package, "PackageId");
Map(x => x.BrandName);
References(x => x.Manufacturer).Columns(x => x.ManufacturerId).Nullable();
Map(x => x.ArtificialBrand);
}
但我找不到问题所在。我发现的唯一事实是,Brand 具有经典 ID 键,但 Package 具有复合键。
PS:来自 nHibernate 的 SQL 查询是:
SELECT this_.BrandName as y0_, packageali1_.PackageID as y1_ FROM CD.Brands this_ WHERE this_.ArtificialBrand = @p0 and packageali1_.PackageID in (...)
如您所见,没有 JOIN。
谁能指点我哪里出了问题?
【问题讨论】:
标签: c# sql nhibernate fluent-nhibernate