Bir yabancı anahtar temel alınarak bir koleksiyon filtrelemek çalışıyorum. Ben maddesi olmayan bir tablo diğer adı başvuran burada Bununla birlikte, bu orada Yanlış tablo diğer ad kullanarak NHibernate
SELECT this_.ServiceCode as ServiceC1_9_0_, this_.GroupID as GroupID9_0_, this_.Price as Price9_0_ FROM accGroupPriceOverride this_ WHERE customeras1_.GroupID = @p0
üreten iki
public class GroupPriceOverrideMap:ClassMap<GroupPriceOverride>
{
public GroupPriceOverrideMap()
{
CompositeId()
.KeyReference(x => x.Service,"ServiceCode")
.KeyReference(x => x.CustomerAssetGroup, "GroupID");
Map(x => x.Price);
Table("accGroupPriceOverride");
}
}
public class CustomerAssetGroupMap:ClassMap<CustomerAssetGroup>
{
public CustomerAssetGroupMap()
{
Id(x => x.GroupID).Unique();
Map(x => x.Description);
References(x => x.Customer).Column("CustomerID");
HasMany<GroupPriceOverride>(x => x.PriceOverrides).KeyColumn("GroupID");
Table("accCustAssetGroup");
}
}
ile eşlenir sınıfları o
_session.Linq<GroupPriceOverride>.Where(x => x.CustomerAssetGroup.GroupID == groupID)
kullanarak sorgu sahip (customeras1). Bu muhtemelen customerassetgroup ile geçiş için bir takma addır, ancak bu haçı gerçekleştirmeye gerek yoktur. Eminim ki haritalamamdaki bir şey yanlıştır ama bulamıyorum. Her iki tablodaki GroupID'nin varlığının sorunlara neden olduğu ancak düzeltmediği durumlarda çeşitli sütun yeniden adlandırma denedim. Herhangi bir fikir?
Düzenleme ben
_session.Linq<CustomerAssetGroup>().Where(x => x.GroupID == groupID).FirstOrDefault().PriceOverrides;
yapıyor sorgulanan eğer o zaman doğru sonucu var olduğunu gördük. Ayrıca bir GroupPriceOverride kaydettim ve HQL kullanarak bunu sorguladıysam, bunun bulunamayacağını buldum, ancak ebeveyni yükleyerek ve geçersiz kılmalar koleksiyonuna bakarak öğeyi hala bulabildiğimi keşfettim.
_session.CreateQuery("FROM GroupPriceOverride i").List().Count;//returns 0
_session.CreateQuery("FROM CustomerAssetGroupi").List().FirstOrDefault().PriceOverrides.Count;//returns 1
Teşekkürler, James, Sorun göstermek ve açmak için bir birim testi oluşturdum http://216.121.112.228/browse/NHLQ-83 – stimms
BTW - NH2.1.2 veya NH3 kullanıyor musunuz? NH3 kullanıyorsanız, ISession.Query'u (aslında bir uzantı yöntemi) kullanmak için dönüştürmeyi deneyin. Hatanız, kullanımdan kaldırılmış olan eski LINQ sağlayıcısında. Yeni LINQ sağlayıcısı yeni bir yeniden yazımdır. –
2.1.2, NH3 kullanmamamın bir sebebi olduğuna eminim, ancak nupack'in NH3 (tembel) için akıcı bir nhibernatı olmadığı da olabilirdi. NH3'e karşı akıcı yeniden inşa etmeyi ve bunun yerine kullanmayı deneyeceğim. – stimms