2009-03-12 17 views
1

Gelişmiş bir NHibernate kullanıcısı değilim, bu yüzden bu biraz önemli olabilir ve henüz keşfetmedim .. ama ne halt. NHibernate Seti elemanı belirtirken yazmak için yeterli değilNHibernate küme eşlemesi DRY değil mi?

public class House 
{ 
    public int Id { get; set; } 

public ISet<Room> Rooms 
{ 
    get; 
    set; 
} 

} 

:

<set name="Rooms"> 
    <key column="RoomId"/> 
    <one-to-many class="Room"/> 
</set> 

Bu görünüyor:

<set name="Rooms" /> 

Onun yerine en az yazmak zorunda

sınıfı düşünün DRY ilkesinin ihlali olması. Eğer bir Küme ise, varsayılan değer bire çok ilişki olmalıdır. Sınıf, koleksiyonun jenerik türünden çıkarılmalıdır ve temel sütun olarak, koleksiyon öğesinin sınıfının birincil anahtarı kullanılmalıdır.

Bu bana mantıklı bir varsayılan gibi geliyor. Neden o zaman, NHiberbate bu konuda akıllı değil ve bu ekstra 3 satırı yazmamı mı istiyor?

cevap

0

Fluent NHibnernate'a bakabilirsiniz. DSL'leri DRY'den ilham alıyor.

Düzenleme: Maalesef ... daha dikkatli okusaydın da örneğin, Akıcı NHibernate siz eşleştirmeyi ifade etmek sağlayacak İlişkin

: Ancak

HasMany(x => x.Rooms); 

, hasMany (veya Bire Çok) ilişki IList ile eşleştirilmiştir. Bunun daha da özelleştirilip özelleştirilemeyeceğinden emin değilim (Fluent haritasını varsayılan olarak ISet'e bırakın). Ancak her iki durumda da standart haritalama beyanından daha az tekrarlayıcıdır.

Haritalama bildirimleri için bazı örnekler: Fluent NHibernate Wiki.

+0

FluentNHibernate'in farkındayım. Ancak bu benim için bir seçenek değil ve yine de soruya cevap vermiyor. –

0

Genel bir koleksiyon kullanmıyorsanız ne olacak? Eğer yanılmıyorsam NHibernate sadece 1.2 sürümünden itibaren jeneriği destekliyor; önceki sürümlerde tür çıkarım kesinlikle mümkün değildi.

Birincil DB'yi, ilgili tabloda yabancı anahtar olarak kullanılmayan eski bir DB kullanıyorsanız ne olur?

+0

O zaman varsayılanlarla gitmem. Ancak, bu değerleri varsayılan olarak almak, IMHO anlamına gelir. .NET 1.1 zamanında bile anlamlı olsa bile, artık değil. Yani bir kalan var mı? –

1

Çünkü, sanırım, NH, haritalamalara dayanan vekilleri oluşturduğunda, meclislerinizi de geçirmenin daha uzun zaman alacağını ve yansımasıyla, ne yapması gerektiğini öğrenmek zorunda kalacak. Bu, NH fabrikasının başlangıç ​​zamanına eklenecektir.

Unutmayın, bu bir ilişkisel eşleştirmenin nesnesidir. Çalışması gereken DB anahtarının ne olduğunu söylemek için ek düğümlerden (anahtar) en az birine gereksiniminiz olacaktır. Bu, DB'ye eşleme yaparken istediğiniz kadar esnek olmanıza ve bir varsayılana bağlı olmamasına izin verir.

DRY kırıyor mu? Muhtemelen. Bu durumda ben ilgilenir miyim? Hayır gerçek değil.