11

나는 이것이 간단해야한다고 생각하지만 어떻게해야 할지를 알 수 없다. 나는 다음과 같은지도가 있다고 가정 : 테이블을 생성Fluent Nhibernate 1.0 - 클래스와 조인 하위 클래스 사이의 외래 키 제약 이름 지정

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

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

을 나는 예상대로 :

언급 한 바와 같이
Animal 
------ 
Id 

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

의 FK는 DB에 의해 생성 FK3500ABA0D으로 끝됩니다. 내가하고 싶은 것은 그 제약 조건의 이름을 설정하는 것이지만, Fluent NHibernate (또는 실제로는 NHibernate를 사용하여)를 수행하는 방법을 찾을 수 없습니다.

그래서 나는 무엇을 놓치고 있습니까?

+0

FNH 1.0 명 FKS 수있는 능력이 없었로 명명 될 것이다 : – Andy

답변

0

FluentNH가 지원하는 경우 나도 몰라,하지만 XML은 간단하다 :

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

유창함 NH이 허용 수행합니다

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

당신은 또한 IHasManyConventionIHasManyToManyConvention를 구현해야 것 위와 같은 방법으로

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)); 
    } 
} 

귀하의 외래 키 제약 조건은 다음 FK_Cat_Animal

+0

FYI, 당시 질문에 답을하고 그 기능이 FNH에 없다고 대답했습니다. 질문을 업데이트하고 왜 대답이 변경되지 않는지에 대한 설명을 남겼습니다. 귀하의 답변을 주셔서 감사합니다! – Andy

0

나는 동일한 문제 나 잘 다음과 같은 일을했다. 허용 된 답변은 해당 버전과 관련이 있지만 이후 버전에서는 아래 답변을 참조해야합니다.
+0

그러나 FNH 1.0에서이 작업을 수행 했습니까? 최신 버전에서는이 문제가 해결되었지만이 질문은 1.0에 관한 것입니다. – Andy

관련 문제