9

olmayan etki alanı modeli sınıfları şunlardır: üst sınıf soyut olduğunuNHibernate haritalama soyut ve ayırt edici İşte bir dize

public abstract class BaseClass 
{ 
... 
} 

public class ChildClass : BaseClass 
{ 
... 
} 

Not ve bu bana bazı zorluklar veren şeydir akıcı nhibernate ile harita için zaman gelir. Ayrımcım bir bayttır (DB'deki küçük harf).

DiscriminateSubClassesOnColumn<byte>("Type") 
    .SubClass<ChildClass>() 
    .IsIdentifiedBy((byte)OperationType.Plan) 
    .MapSubClassColumns(p => { ... }) 

alıyorum hata iletisi: bir dize değil ve ben, temel sınıf bir diskriminatör değerini ayarlamak için yönetemez Bu işe yaramazsa Çünkü (BaseClass için haritalama sınıfından alınan):

Sınıf Başlatma yöntemi UnitTest1.MyClassInitialize istisnası attı. NHibernate.MappingException: NHibernate.MappingException: Diskriminator değeri, SQL Server nesnesine biçimlendirilemedi. BaseClass ---> System.FormatException: Girdi dizgisi, doğru biçimde değil ..

Aşağıdaki mesaj, ne olduğunu açıklıyor gibi görünüyor. Xml ile ancak nanobernat ile bir çözüm vermezler: http://forum.hibernate.org/viewtopic.php?t=974225

Yardımlarınız için teşekkürler.

SetAttribute("discriminator-value", "-1"); 

O (öyle düşünüyorum FNH bir dize kullanmamayı talimat görünüyor:

+0

XML ile çözüme bağlandığınız için teşekkürler - tam olarak ihtiyacım olan şey! –

cevap

12

Ben geçici bir çözüm bulduk ama bu bir yama gibi pek görünüyor ... Ben eşleme dosyasına aşağıdaki eklendi soyut temel sınıf için sınıf adını kullanır. -1 değeri ile çalışmasını sağlamak için, diskriminator türümü bayttan sbyte'ye değiştirdim.

Düzenleme: bu varsayılan değeri alır DiscriminateSubClassesOnColumn ikinci parametredir: Bunu kaçırdım. Bu yüzden benim soruma doğru cevap:

DiscriminateSubClassesOnColumn<sbyte>("Type", (sbyte)-1) 
+0

Çok teşekkürler - Diskriminator ile dize olmamasına benzer bir sorun yaşıyordum. – Ted