2

Fluent NHibernate와 C# .NET을 처음 접했고이 문제로 어려움을 겪고 있습니다.Fluent NHibernate 매핑 고아가있는 자식 레코드가있는 부모/자식 테이블

감사 : audit_seq (기본 키), user_code (외래 키),

이름 audit_date : user_code (기본 키), _ 이름

나는 두 개의 테이블이

감사 테이블에는 사용자의 외부 키 필드 (user_code)가있는 감사 레코드가 들어 있습니다. 문제는 일부 사용자 레코드가 삭제되었지만 해당 사용자의 감사 레코드가 남아 있기 때문에 (감사 테이블에 외래 키가 고아가 있음). 필자가 원하는 것은 audit_seq, audit_date 및 user_name으로 설정된 결과입니다 (단, 분리 된 경우 user_name은 공백이어야 함).

다음 매핑을 사용하고 있지만 외부 조인을 만들려면 UserName 참조를 변경해야한다고 생각합니다. 어떻게해야할지 모르겠다.

public class AuditMap : ClassMap<Audit> 
{ 
    public AuditMap() 
    { 
     Id(x => x.AuditSeq).Column("audit_seq").GeneratedBy.Assigned(); 
     Map(x => x.AuditDate).Column("audit_date"); 
     References(x => x.UserName).Column("user_code"); 
    } 
} 

답변

3

username은 (나는 그것의 재산 UserName을 구분하기 User를 사용할 것인가? 클래스 UserName) 엔터티에 매핑해야합니다. 그런 다음 감사에서을 참조 할 수 있습니다.

public class AuditMap : ClassMap<Audit> 
{ 
    public AuditMap() 
    { 
     Id(x => x.AuditSeq).Column("audit_seq").GeneratedBy.Assigned(); 
     Map(x => x.AuditDate).Column("audit_date"); 
     References(x => x.User).Column("user_code") 
      .NotFound.Ignore(); 
    } 
} 

그래서 지금 우리가 AuditUser에 대한 참조를 가지고있다 : C#에서

public class Audit 
{ 
    ... 
    public virtual User User { get; set; } 
    public virtual string UserName 
    { 
    get { return User != null ? User.UserName : string.Empty ;} 
    } 
} 

User 매핑

public class UserMap : ClassMap<User> 
{ 
    public UserMap() 
    { 
     Id(x => x.UserCode).Column("user_code").GeneratedBy.Assigned(); 
     Map(x => x.UserName).Column("user_name"); 
     ... 
    } 
} 

그런 다음 우리는 Audit 매핑이 방법을 조정할 수 있습니다. 참조 된 일부 사용자가 누락되었다는 사실을 무시합니다 (.NotFound.Ignore()). 그리고 만약 있다면 우리의 UserName 속성은 그 이름을 반환합니다.