2010-01-13 2 views
3

저는 NHibernate이고 유창한 nhibernate 초보자입니다. 그리고 고유 제약과 nhibernate 매핑에 문제가 있습니다.유창한 nhibernate 자동 매핑을 사용하는 외래 키에 다중 열 고유 제한을 추가하십시오.

나는 도메인 모델의 다음 부분을 가지고있다.

저는 automapping을 사용하여 fluent-nhibernate를 사용하여 db (SQLServer)에 매핑하려고합니다. 내가 가지고하기 위해 내 DB를 설정해야합니다 :

  • 기본 키를 "ID"의의 속성

  • BatchParamets 테이블에 외래 키

  • 고유 제한 조건 열의 배치 테이블 이름

  • a 이름 및 Batch_Id 열의 BatchParameters 테이블에 대한 고유 제한

  • 기본 키에 대한

    public class BatchMapping : IAutoMappingOverride<Batch> 
    { 
        public void Override(FluentNHibernate.Automapping.AutoMapping<Batch> mapping) 
        { 
         mapping.Id(b => b.Id); 
         mapping.HasMany<BatchParameter>(p => p.BatchParameters).Cascade.All().Inverse(); 
        } 
    } 
    
    public class BatchParameterMapping : IAutoMappingOverride<BatchParameter> 
    { 
        public void Override(FluentNHibernate.Automapping.AutoMapping<BatchParameter> mapping) 
        { 
         mapping.Id(b => b.Id); 
         mapping.Map(b => b.Name).Unique(); 
         //mapping.Map(p => p.Name).UniqueKey("Batch_Parameter"); 
         //mapping.Map(p => p.Batch.Id).UniqueKey("Batch_Parameter"); 
        } 
    } 
    

    없음 문제, 외부 키와 최초의 고유 제한 조건 :

그래서이 코드를 작성했습니다. 고유 제한에 대한 약간의 두통.

누군가 나를 똑바로 보여줄 수 있습니까 ???

감사합니다.

답변

0

ID 및 이름이 BatchParameter 테이블의 기본 키인 경우 복합 ID가 필요합니다. 또한 BatchParameter 클래스에서 Batch에 대한 참조를 다시 원할 경우 Reference를 사용해야합니다. 다음은 당신이 필요에 가까워 야 :

public class BatchParameterMapping : IAutoMappingOverride<BatchParameter> 
{ 
    public void Override(FluentNHibernate.Automapping.AutoMapping<BatchParameter> mapping) 
    { 
     mapping.CompositeId() 
      .KeyProperty(x => x.Id) 
      .KeyProperty(x => x.Name); 

     mapping.References(x => x.Batch); 
    } 
} 
1

먼저, 복사 및 붙여 넣기 오류가있는 것 같습니다 : ...Map(b => b.Name)...BatchMappingBatchParameterMapping을하지 가야한다.

public class BatchMapping : IAutoMappingOverride<Batch> 
{ 
    public void Override(AutoMapping<Batch> mapping) 
    { 
     mapping.Map(b => b.Name).Unique(); 
    } 
} 

다음 BatchParameter.BatchBatchParameter에서 Batch에 대일 관계이므로은 References(...) 대신 Map(...) 매핑한다. 다른 엔티티에 대한 외래 키에는 References을 사용하고 간단한 특성에는 Map을 사용합니다.

public class BatchParameterMapping : IAutoMappingOverride<BatchParameter> 
{ 
    public void Override(AutoMapping<BatchParameter> mapping) 
    { 
     mapping.Map(p => p.Name).UniqueKey("Batch_Parameter"); 
     mapping.References(p => p.Batch).UniqueKey("Batch_Parameter"); 
    } 
} 

마지막으로, Id 속성과 Batch.BatchParameters에 대한 불필요한 매핑을 제거해야합니다. Fluent NHibernate의 자동 매핑은 기본적으로 원하는대로 매핑합니다. Override 메서드에서는 고유 키 지정과 같이 자동 매핑 기본값과 다른 방식으로 원하는 속성 만 지정하면됩니다.

관련 문제