11

Bu bence basit olmalı, ancak nasıl yapılacağını anlayamıyorum. Ben şu haritaları olduğunu varsayalım: tablolar oluştururFluent Nhibernate 1.0 - Sınıf ile alt sınıf arasına yabancı anahtar kısıtlaması adını belirtin

public class AnimalMap : ClassMap<Animal> { Id(x => x.Id); } 

public class CatMap: SubclassMap<Cat> { 
    Extends<AnimalMap>(); 
    Map(x => x.IsDomestic); 
} 

beklediğim gibidir:

belirtildiği gibi
Animal 
------ 
Id 

Cat 
---- 
AnimalId : FK to Animal (named FK3500ABA0D) 
IsDomestic 

, FK db tarafından oluşturulan ve FK3500ABA0D olarak biter alır. Tek yapmak istediğim, bu kısıtlamanın adını belirlemek, ancak Fluent NHibernate (ya da aslında o kadar sade NHibernate) aracılığıyla bunu nasıl yapacağımı bulamıyorum.

Peki, neden eksik?

+0

FNH 1.0 isim FKS yeteneği yoktu görevine getirileceği: – Andy

cevap

0

FluentNH destekliyorsa bilmiyorum ama XML basittir:

<joined-subclass name="Cat"> 
    <key column="AnimalId" foreign-key="NameOfTheFK"/> 
</joined-subclass> 
21

Akıcı NH buna izin yapar:

public class ReferenceConvention : IReferenceConvention{ 
    public void Apply(IManyToOneInstance instance) { 
      instance.ForeignKey(string.Format("FK_{0}_{1}", 
       instance.EntityType.Name, 
       instance.Name)); 
    } 
} 

Ayrıca IHasManyConvention ve IHasManyToManyConvention uygulamak gerekiyordu Yukarıdaki gibi aynı şekilde.

public class JoinedSubclassForeignKeyConvention : IJoinedSubclassConvention 
{ 
    public void Apply(IJoinedSubclassInstance instance) 
    { 
     if (instance.Type.BaseType != null) 
      instance.Key.ForeignKey(string.Format("FK_{0}_{1}", instance.EntityType.Name, instance.Type.BaseType.Name)); 
    } 
} 

Kişisel yabancı anahtar kısıtlaması sonra FK_Cat_Animal

+0

FYI, soru sorulduğunda ve bu özelliğin yanıtı FNH'de değildi. Soruyu güncelledim ve kabul edilen cevabın neden değiştirilmediğini açıklayan bir yorum bıraktım. Cevabınız için teşekkürler! – Andy

0

Ben aynı sorun benim için de şu işleri vardı. Kabul ettiğim cevap bu sürüme ait, ancak sonraki sürümler aşağıdaki cevabı görmeli.
+0

Bu çalışma FNH 1.0 ile yapıldı mı? Daha sonraki sürümler sorunu çözdü, ancak bu soru özellikle 1.0 civarında. – Andy

İlgili konular