2009-03-12 3 views
2

ID 열은 생성자를 지정할 수 있습니다. 완전한.속성에 대해 nHibernate 생성 값을 사용할 수 있습니까?

그러나 null 인 경우 생성 된 값을 속성 열에 할당해야하는 상황이 있습니다. 대용 기본 키 열과 송장 번호 열이있는 송장 테이블의 선을 따라 무엇인가 생각해보십시오.

CREATE TABLE dbo.Invoice (InvoiceId INT NOT NULL PRIMARY KEY IDENTITY(1,1), InvoiceNumber INT NOT NULL, InvoiceDate DATETIME NOT NULL, remaining columns...)

이 기본값이 아닙니다. 송장 번호에는 해당 세대의 특정 규칙이있을 수 있습니다. 실제 세대를 처리하는 C# 클래스가 있습니다. Invoice 클래스의 속성 값을 채울 방법을 찾아야합니다.

이상적으로 매핑의 ID에 대해 수행하는 것처럼 속성에 대한 생성기를 지정할 수 있습니다. 불행히도, 그것은 내가 무엇을 결정할 수있는 것으로 보이지 않습니다. 나는 틀렸어.

트리거를 사용하여 생성기를 공급자에 삽입하는 것과 같이 사용할 수있는 다른 비 nHibernate 옵션이 있습니다. 그러나 코딩 옵션 대신 구성 옵션을 유지하고 싶습니다.

그런 능력이 있는지 아는 사람이 있습니까?

답변

0

늦게 답변 해 주셔서 죄송 합니다만, 최근에 귀하와 같은 문제가 발생했습니다. 나는 NHibernate 소스에서 약간의 backtraced하고 해결책을 찾은 것처럼 보인다.

Guid 생성을 위해 NHibernate.Id 네임 스페이스를 사용할 수 있습니다. 클라이언트가 Guid를 생성하도록하거나 네이티브 DB가 그렇게하도록 두 가지 가능한 옵션이 있습니다.

  • NHibernate.Id.NativeGuidGenerator // DB 생성
  • NHibernate.Id.GuidGenerator // 클라이언트 세대 NHibernate.Id를 사용

:

이 당신이 필요로하는 클래스입니다. NativeGuidGenerator-class는 다음과 같이 수행 할 수 있습니다.

public Guid GetNewSessionId() 
{ 
    NHibernate.Id.NativeGuidGenerator guidGen = new NHibernate.Id.NativeGuidGenerator(); 
    return (Guid)(guidGen.Generate((NHibernate.Engine.ISessionImplementor)anOpenSession, null)); 
} 

행운을 빕니다 :)

0

기본값을 제공 하시겠습니까? 나는 이것이 당신이 DB 수준에서 지정해야 뭔가해야한다고 말할 것

...

당신이 정말로 NHibernate에이를 돌봐 것을 원하는 경우

, 난 당신이 값을 설정합니다 인터셉터를 작성해야한다고 생각 플러시 타임에 null 인 경우 해당 속성의

또는 생성자에서 속성에 기본값을 지정하여 엔터티에 기본값을 지정할 수 있습니다.

+0

기본값이 아닙니다. 새로운 엔티티가 저장 될 때 생성되는 고유 한 값. 나는 요격기를 잊어 버렸다. – Cory

2

NHibernate는 도메인 클래스 (예 : 생성자)에서 모든 규칙을 정의 할 것으로 기대합니다.

관련 문제