2011-12-06 4 views
0

많은 열거 값을 통해 가입 할 수 있습니다. NHibernate에 기준은 내가 <code>User</code>라는 하나의 클래스와 <code>UserRole</code> 열거 값이 클래스의 컬렉션을했습니다

public class User { 
    ... 
    public ICollection<UserRole> UserRoles { get; private set; } 
    ... 
} 

[Flags] 
public enum UserRole { 
    Beginner = 1, 
    Advanced = 2, 
    Expert = 4, 
    Admin = 8 
} 

UserUserRole

관계는 관계는 many-to-many 세 테이블 (tblUser, tblRole 및 tblUserRole 갖는 ID 및 역할 ID 만)로 구현. HBM은 다음과 같다 :

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"> 
    <class name="User, SampleDll" table="tblUser"> 
    ... 
    <bag name="UserRoles" table="tblUserRole" cascade="all-delete-orphan" fetch="join"> 
     <key column="UserId"/> 
     <element column="RoleId" type="UserRole, SampleDll" />  
    </bag> 
    ... 
    </class> 
</hibernate-mapping> 

지금 내가있는 (사용 queryOver 또는 분리 기준 중 하나를 같은 기준을 실현하는 것이 가능

select u.* from tblUser u 
left join tblUserRole ur on ur.UserId = u.UserId 
where ur.RoleId = @USER_ROLE 

같은 sematics이있는 기준을 만들려면) UserRole 열거 형에 대한 별도의 매핑 파일없이?

미리 감사드립니다.

Mrks는

답변

0

이미 이미 basicly 값의 모음 인 플래그 열거 있습니다. 당신이 테이블 UserRoles 및 역할 필요도 해달라고 들어, 사용자의 단순한 열이 충분하다 당신이 정말로 같은 것을 원하는


[Flags] 
public enum UserRoles { 
    Beginner = 1, 
    Advanced = 2, 
    Expert = 4, 
    Admin = 8 
} 

public virtual UserRoles Roles { get; private set; } 

<property name="Roles" column="UserRoles"/> 
: 다음

public class User { 
    ... 
    public virtual ICollection<UserRole> Roles { get; private set; } 
    ... 
} 

public class UserRole { 
    public virtual int Id { get; set; } 

    ... 
} 

<bag name="Roles" table="tblUserRole" cascade="none"> <!-- none because Roles are somewhat static not per user --> 
    <key column="UserId"/> 
    <many-to-many column="RoleId" class="UserRole, SampleDll" />  
</bag> 

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="UserRole" table="Roles"> 
    <id name="Id"/> 
    <!--additional properties--> 
    </class> 
</hibernate-mapping>