Çok sayıda ilişki oluşturmak istiyorum, ancak yeni tabloda (MessageReceivers) her iki sütunda da benzersiz bir kontrata sahip olmak istiyorum (AdvanceMessageId, KullanıcıNo): yardımFluent-NHibernate: Benzersiz bir contraint ile çoktan çoğa ilişkisi oluşturma
cevap
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.
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
Çok değerli bilgiler; paylaşım için teşekkürler. – contactmatt