2009-02-26 2 views
0

도와주세요 - NHibernate에 익숙하지 않아 내가 찾고있는 것을 찾지 못하는 것 같습니다.정규화 후 NHibernate 매핑

데이터베이스에 두 개의 테이블이 있습니다 : FundFundBalance. FundFundBalances을 많이 가질 수 있으며 FundBalance은 하나만 Fund입니다.

C#에는 FundBalance 클래스 만 있습니다. Fund 테이블의 열은 FundBalance 테이블의 열과 결합하여 FundBalance 클래스의 속성에 매핑해야합니다.

는 예를 들어, FundFundName 속성을 포함하고 FundBalanceAvailableBalance 속성을 포함한다. 이 두 테이블은 조인되며 조인 결과는 FundBalance 클래스의 FundNameAvailableBalance 속성에 매핑되어야합니다.

질문 : NHibernate로 이것을 어떻게합니까? 보너스 : 어떻게 FluentNibernate를 사용하여 매핑을 지정합니까?

내가 생각한 한 가지 해결책은 데이터베이스에서 뷰를 만드는 것이었지만, NHibernate를 사용하여 매핑을 순전히 수행 할 수 있다면 선호한다.

+0

기금이 여러 기금을 보유 할 수 있으므로 FundBalance 클래스의 데이터는 FundBalance 테이블에서 가져온 데이터에서 무엇입니까? 그러면 FundBalance 클래스는 어떻게 생겼으며 정확히 무엇이 들어가는가? –

답변

1

당신이 정상적으로 FundBalances 작업을 할 수있을 것입니다 그런 식으로,하지만; 이 FundBalance 클래스는 어떻게 생겼습니까? 거기에 무엇이 들어 있습니까? NHibernate 매핑에서 <join table> 요소를 사용하여 작업을 수행 할 수 있습니까? 예를 들어

: http://ayende.com/Blog/archive/2007/04/24/Multi-Table-Entities-in-NHibernate.aspx

+0

정확히 내가 필요한 것입니다! – Trumpi

0

귀하가 펀드 클래스를 갖고 있지 않은 이유는 무엇입니까? 이것이 정말로 현명하다면 다시 생각해 보겠습니다.

그러나 당신이 그 노선에 체류하려는 경우, 부속 선택 속성은 (미안 해요 최대 절전 모드 문서없는 자 NHibernate에서이있다, 그러나 나는 그들이 비슷한 충분히 희망 : http://www.hibernate.org/hib_docs/core/reference/en/html_single/#mapping-declaration-class) 도움이 될 수

나는이 생각하는 것 선택, 업데이트 및 삭제 작업을해야합니다. 하지만 당신이 새로운 펀드 레코드가 필요한지 결정할 책임이있는 인서트 (Hibernate로부터 독립적 임)가 어떻게 작동해야하는지 잘 모르겠다. .

데이터베이스에서보기를 만들고 대신 데이터베이스에서 지원하는 경우 "트리거 대신"을 사용하는 방법도 있습니다.

+0

감사합니다. 응답에서 제기 한 질문에 답하기 위해서 - 우리는 엔티티를 기존 시스템과 공유하기 때문에 Fund 클래스가 없습니다. 왜 그 이유는 들어 가지 않지만 엔티티를 공유해야합니다. – Trumpi

+0

별도의 fund 및 fundBalance 클래스를 사용하도록 시스템을 구성하는 것이 적절한 도메인 모델 인 것처럼 보이게 한 다음 레거시 시스템에 대해 별도의 인터페이스를 만드십시오. 그런 식으로 나중에이 클래스들을 중심으로 시스템을 구축 할 때 당신은 제정신이 아닙니다. – zappan

0

façade 패턴을 사용하지 않는 이유는 두 테이블 모두에 공통 클래스가 필요한 이유는 무엇입니까? Fund Fund and FundBalance를 정상적으로 매핑하려면 (매핑되지 않은) 새로운 클래스를 두 엔티티의 인터페이스로 만듭니다. 단순하고 "마법"은 전혀 관여하지 않습니다.

-1

상속에 대한 최대 절전 모드 지원을 사용하여 수행해야합니다. Hibernate는 여러 가지 다른 방법으로 관련 클래스의 패밀리를 모델링 할 수 있지만, 하나는 기본 클래스의 테이블이고 다른 하나는 서브 클래스가 다른 특성을 보유하는 테이블이다. 로드 할 때 모든 열이 지정된 하위 클래스에 자동으로로드되므로 한 클래스만으로 가짜 상속 구조를 만들고 설명대로 정확하게 수행해야합니다.

+0

이것은 상속과는 아무런 관련이 없습니다. –

0

기금을 읽는 것만하고 기필에 쓸 필요가없는 경우 수식을 사용할 수 있습니다.예를 들어 : 내가 코멘트에 요청했습니다으로 자금

1

당신은 당신의 문제를 해결하기 위해 뷰를 사용할 필요가 없습니다. FundBalance 테이블에 대한 매핑을 만들 때 조인에 대해 구체적으로 설명하면됩니다. 저의 이해가 좋은 경우 FundBalance 클래스를보다 완전하게 만들고 기금 테이블의 일부 속성을 갖고 싶습니다.

이 시도 :

<class name="FundBalance" table="FundBalance" lazy="true"> 
     <id name="Id" column="FundBalanceId" unsaved-value="0"> 
      <generator class="native"/> 
     </id> 

     <property name="FundBalance" not-null="true" length="80"/> 

     <join table="Fund"> 
      <key column="FundId"/> 
      <property name="FundName"/> 
     </join> 
</class> 

당신의 FundBalance 엔티티 클래스의 코드가 될 것이다 :

public class FundBalance 
{ 
     private long _Id; 
     public virtual long Id 
     { 
      get { return _Id; } 
      set { _Id = value; } 
     } 

     private decimal _FundBalance; 
     public virtual decimal FundBalance 
     { 
      get { return _FundBalance; } 
      set { _FundBalance= value; } 
     } 

     private string _FundName; 
     public virtual string FundName 
     { 
      get { return _FundName; } 
      set { _FundName= value; } 
     } 
} 

하나 enties이 시도를 위해 당신은 매핑하여 여러개의 테이블의 문제에 대한 많은 예제와 설명이 필요한 경우 링크 :

https://svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate.Test/Join/ http://ayende.com/Blog/archive/2007/04/24/Multi-Table-Entities-in-NHibernate.aspx

,

유창한 nhibernate에 대해 HBM 매핑 파일을 제공합니다. JOIN 키워드를 사용할 수 있는지 여부는 알 수 없지만 기본 문제는 저조합니다.

희망이 도움이됩니다.