2009-11-12 27 views

cevap

5

Eski sonrası ... ama durumda başkasının geldiğinde Burada cevabı arıyorum:

HasManyToMany eşleme tanımlamasına .AsSet() eklemeniz gerekir.


yani

mapping.HasManyToMany(x => x.Users) 
     .WithTableName("MessageReceivers") 
     .WithParentKeyColumn("UserId") 
     .WithChildKeyColumn("AdvanceMessageId") 
     .Inverse().AsSet(); 

Bu olacak kurulum iki sütunu kullanan bağlantı masaya eşsiz, bileşik birincil anahtar kısıtlaması. (kümelenmiş dizin)

Aşağı tarafı AsSet() toplayıcı, IList türündeki toplama özellikleriyle birlikte kullanılabilir; bu nedenle, döküm olmadan döngülere hayır.

Uygulamalarım için ICollection kullanıyorum ve bunları HashSet olarak başlatıyorum ve iyi çalışıyor. Akıcı NHibernate ile tahsilat yönetimi konusunda


diğer bilgiler:

listesi: varlıkların Sıralı koleksiyon izin yinelenen. Kodda bir .net IList kullanın. İndeks sütununun NHibernate ile eşleştirilmesi gerekecektir.

Set: Benzersiz varlıkların sırasız toplanması, çoğaltılamaz. Kodda Iesi.Collection.ISet kullanın. Yinelenen iş tanımını belirtmek için GetHashCode ve Equals'ı geçersiz kılmak önemlidir. Bir siparişi tanımlayarak veya bir SortedSet sonucuna neden olan bir karşılaştırıcı tanımlayarak sıralanabilir.

Torba: Öğelerin sırasız listesi, çoğaltılanlar izinli. Kodda bir .net IList kullanın. Listenin dizin sütunu eşlenmemiş ve NHibernate tarafından onurlandırılmamıştır.

+0

Çok değerli bilgiler; paylaşım için teşekkürler. – contactmatt

2

için

mapping.HasManyToMany(x => x.Receivers) 
     .WithParentKeyColumn("AdvanceMessageId") 
     .WithChildKeyColumn("UserId") 
     .Cascade.All() 
     .LazyLoad() 
     .WithTableName("MessageReceivers"); 

Teşekkür Ayrıca yeni Akıcı NHibernate yılında

mapping.HasManyToMany(x => x.Users) 
     .WithTableName("MessageReceivers") 
     .WithParentKeyColumn("UserId") 
     .WithChildKeyColumn("AdvanceMessageId") 
     .Inverse(); 

gibi ilişkinin ters tarafını haritalandırmalıdır olacak > Tablo

  • WithParentKeyColumn - -> ParentKeyColumn

  • WithChildKeyColumn -

    • WithTableName değiştirmek zorunda> ChildKeyColumn