문제

이 시점에서 너무 생각하고 있을지도 모르지만 여기에 질문이 있습니다.

사용자와 그룹이라는 2개의 클래스가 있습니다.사용자와 그룹은 다대다 관계를 갖고 있으며 group_users 조인 테이블에 IsAuthorized 속성을 갖고 싶다고 생각했습니다(일부 그룹은 비공개이므로 사용자에게는 인증이 필요함).

조인 테이블과 사용자 및 그룹 테이블에 대한 클래스 생성을 권장하시겠습니까? 현재 내 수업은 다음과 같습니다.

public class Groups
{
    public Groups()
    {
        members = new List<Person>();
    }
    ...
    public virtual IList<Person> members { get; set; }
}

public class User
{


    public User()
    {
       groups = new Groups()
    }
    ...
    public virtual IList<Groups> groups{ get; set; }

}

내 매핑은 두 클래스 모두에서 다음과 같습니다(사용자 매핑에는 하나만 표시하고 있지만 매우 유사합니다).

HasManyToMany<Groups>(x => x.Groups)
.WithTableName("GroupMembers")
.WithParentKeyColumn("UserID")
.WithChildKeyColumn("GroupID")
.Cascade.SaveUpdate();

다음과 같은 조인 테이블에 대한 클래스를 작성해야 합니까?

public class GroupMembers
{
    public virtual string GroupID { get; set; }
    public virtual string PersonID { get; set; }
    public virtual bool WaitingForAccept { get; set; }
}

저는 그룹 멤버십 상태를 조정할 수 있기를 정말로 원하며 이에 대한 최선의 방법을 생각하려고 노력하고 있습니다.

도움이 되었습니까?

해결책

나는 일반적으로 실제 비즈니스 엔터티를 나타내는 클래스만 만드는 것을 좋아합니다.이 경우 'groupmembers'는 코드에서 가치 있는 어떤 것도 나타내지 않는다고 생각합니다.나에게 ORM은 데이터베이스를 비즈니스 개체에 매핑해야 합니다.이는 클래스가 데이터베이스 레이아웃을 정확하게 미러링할 필요가 없음을 의미합니다.

또한 GroupMembers를 구현하면 사용자 클래스와 그룹 클래스 모두에서 불쾌한 컬렉션이 생길 것이라고 생각합니다.즉.그룹 클래스에는 사용자 목록과 사용자를 참조하는 그룹 구성원 목록이 있으며 그 반대의 경우도 마찬가지입니다.나에게 이것은 그다지 깨끗하지 않으며 변경 사항을 테이블에 유지하고 전파하는 것을 더 어렵게 만듭니다.

제안한대로 데이터베이스에 조인 테이블을 유지하고 사용자에 waittoaccept라는 그룹 목록을 추가하고 (이것도 의미가 있다면) 그룹에 waittoaccept라는 사용자 목록을 추가하는 것이 좋습니다.

그런 다음 waittoaccept 플래그를 기반으로 데이터베이스의 조인 테이블에서 값을 가져옵니다.

다른 팁

예, 물론 UserGroupBridge와 같은 다른 클래스가 필요합니다.또 다른 좋은 부작용은 잠재적으로 무거운 사용자/그룹 개체를 Hibernate 세션에 로드하지 않고도 사용자 멤버십과 그룹 구성원을 수정할 수 있다는 것입니다.

건배.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top