2010-04-08 1 views
0

저는 이것이 다소 신생아 문제라고 생각합니다. 나는 약 6 개월 정도 NHibernate/FluentNibernate를 사용 해왔고, 나는 기본에 대해 공정한 이해를 가지고 있다고 생각한다. 이제 저는 조금 넘어 가고 있습니다. 나는 이것이 문서화되어 있다고 확신하지만, 나는 구글에서 몇 시간을 보냈다. 그리고 그것을 알아 내지 못했다. "보류", "ACTIVE"및 "CLOSED"Fluent NHibernate가 일대일 테이블에 합류했습니다

public class Simple 
{ public string Name { get; set;} 
    public string Desc { get; set; } 
    public string Status { get; set;} 
} 

상태가 실제로 값의 작은 세트 중 하나가 될 것으로 제한된다 :

나는 간단한 호출, 간단한 클래스가 있습니다. DB를 스키마, 나는 RetrofitStatus라는 간단한 읽기 전용 테이블이 있습니다

CREATE TABLE [dbo].[RetrofitStatus](
[Status] [nvarchar](10) NOT NULL, 
[SortOrder] [smallint] NOT NULL, 
CONSTRAINT [PK_RetrofitStatus] PRIMARY KEY CLUSTERED 
(
    [Status] ASC 
) 

을 그리고 외래 키 제약 조건이 있는지 여부 RetrofitStatus에 확인하기 위해 간단한 테이블에있다.

RetrofitStatus 테이블의 목적은 내가

SELECT * from Simple s join RetrofitStatus r on r.Status=s.Status ORDER BY r.SortOrder 

(SQL에서) 수행 및 예를 들어, 모든 활성 항목 첫째, 다음 ON (디스플레이 순서로 내 결과를 정렬 할 수 있도록 SORTORDER 열을 포함하는 것입니다

-HOLD 항목, CLOSED 항목, 논리적 순서로 정렬했기 때문에 알파벳순이 아니거나 쉽게 인식 할 수있는 항목이 아닙니다.)

제 질문은 FNH에서 해당 객체와 관계를 어떻게 모델링합니까? SortOrder 속성을 Simple 정의에 추가하고이를 나타내는 View를 만들 수 있지만 새로운 Simple 개체를 테이블에 삽입하려고하면 어떻게됩니까? 분명히, 나는 SortOrder 속성을 삽입하려고하지 않는다. 어떻게 든 NHib 요소를 사용해야 할 필요가 있다고 생각하지만, 다시 말해서 어디로 가야하는지, 삽입시 어떻게되는지, Fluent에서 어떻게 할 것인가에 대해서는 명확하지 않습니다.

나는 시행 착오를 시도해 볼 것이지만, 그들이하고있는 것을 알고있는 누군가 (나는 그렇지 않다)가 올바른 방향으로 나를 가리키며 시간을 절약 할 수 있다고 생각했다. . 당신의 도움을 주셔서 감사합니다.

public class Simple 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Desc { get; set; } 
    public string Status { get; set; 
    public int SortOrder { get; set; } 
} 

를이 같이 매핑 할 수 있습니다 :

public SimpleMap : ClassMap<Simple> 
{ 
    Id(x => x.Id).Unique().GeneratedBy.Native(); 
    Map(x => x.Name); 
    Map(x => x.Desc); 
    Join("RetrofitStatus", join => 
    { 
     join.KeyColumn("Status") 
      .Map(x => x.Status); 
     join.Map(x => x.SortOrder).Not.Insert(); 
    }); 
} 

나는 천국

답변

1

다음과 같이 당신이 Simple 클래스를 수정 한 가정 (난 당신이 키에 대해 무엇을하고 있는지 확실하지 않았다) 이것을 시험해 보지 못했지만 이것은 그것의 요지입니다.

당신은 속성 삽입하거나 당신의 매핑 각각 Not.Insert() 또는 Not.Update()를 사용하여 갱신 또는 ReadOnly()를 사용하여 삽입되지도 업데이트 할 수 있습니다 둘 수 없음을 지정할 수 있습니다.