2012-01-24 22 views
8

Burada
kendi başlarına tek tabloları temsil aşağıdaki modeli varlıkları, olduğunu varsayalım .. benim durum:

Filmler [Movie_Id, Başlık, Değerlendirme, ..]
Aktörler [Actor_Id, ad, soyadı ..] yeniden
Direktörü [Director_Id, ad, soyadı ..]

Ve "öneriler" adlı başka bir varlık/masa, Bir web sitesi içindeki kullanıcılar arasında öneriler sunar. Buradaki fikir, bir tavsiyenin herhangi bir türde, yani bir oyuncuyu tavsiye eden biri veya bir filmi öneren biri olabilir. Temelde, tablo bu gibi görünmelidir:

Öneriler burada [Recommendation_Id, object_id, Nesne_Türü, ..]

Ve içine sıkışmış zaten. Bu ilişkileri nHibernate'de Fluent ile nasıl eşleyebilirim? Demek istediğim .. eşleme yaparken, çalışma zamanı üzerinde belirttiğim Türü (hangi tabloya bağlı) 'belirleyemem, ancak sadece Id'ye güvenemem çünkü neden kendi başına aittir? .
Örneğin, Öneriler masaya bu kaydı düşünün:

Recommendation_Id - object_id - Nesne_Türü
83001--401--- "M"

Temelde ben bu durumda (bir char tanımlayıcı saklamak ediyorum " M "Object_Id" in hangi tabloya ait olduğunu bilmek için tablo "Filmler" anlamına gelir. Object_Type olmadan Object_Id'yi depolayamıyorum ..
Haritalama

Son yorumlar olarak, sınıf başına tablo, tablo başına alt sınıf, tablo başına beton sınıfını gördüğümü eklemek istiyorum. Örnekler, ancak bu durumun bunlara uymadığına inanıyorum, Filmler_Id, Actors_Id, Directors_Id, ... hepsi birbirinden farklıdır, bu yüzden Tavsiyeler_Id. Yani, burada hiçbir temel sınıf-çocuk sınıfı devralma yok, onlar Id'in hiç paylaşmıyorlar ..

Umarım kendimi açıklığa kavuştum. Şimdiden teşekkürler.

+0

akıcı nHibernate şu anda çok-herhangi Bunu yapacağını düşündüğüm olduğu desteklemediği unutulmamalıdır. Yanlış olmadıkça, bir filmi güncellediğinizde bir öneri kaydetmek sorunsuz bir şekilde gerçekleşmeyecektir.Daniel'in cevabı, bulabildiğim her şey hakkında daha yakındı; o) – JasonCoder

+0

"Herhangi bir" ilişkinin diğer tarafını "Movie.Recommendations" deki gibi eşlemek istiyorsanız, bunu bir ile yapabileceğinizi düşünüyorum. -Çoklu 've' '= = '' Object_Type = 'M' '' özniteliği, Fluent NHibernate ile yapabileceğiniz koleksiyon. –

cevap

11

Aradığınız NHibernate eşlemesi <any/> dır.

  • Ayende's blog post
  • NHibernate documentation
  • Fluent NHibernate documentation Senden * .hbm.xml inanıyoruz: İşte birkaç kaynaklar bu NHibernate haritalama özelliği ile hız kazanmasına yardımcı olmaktır Bunun için bir şey şunun gibidir:

    Sunulan öneriyi en eşlemenizde şöyle Akıcı NHibernate ile bunu başarmak mümkün olmalıdır:

    ReferencesAny(x => x.RecommendedObject) 
        .IdentityType<int>() 
        .EntityTypeColumn("Object_Type") 
        .EntityIdentifierColumn("Object_Id") 
        .AddMetaValue<Movie>("M") 
        .AddMetaValue<Actor>("A") 
        .AddMetaValue<Director>("D"); 
    
+0

TEŞEKKÜRLER !! Bunu test ettim ve iyi çalışıyor gibi görünüyor. Cidden, bir milyon teşekkürler Daniel! : =) –

+0

"Object_Id" ile filtreleme ile 'object RecommendedObject' nesnesinin nasıl sorgulanacağıyla ilgili bir örnek gösterebilir misiniz? –

+0

@Christian, http://stackoverflow.com/questions/21940396/fluentnhibernate-referencesany-how-to-use-queryover-with-filter adresinden bahsediyor musunuz? –