2

私は Fluent NHibernate と C#.NET が初めてで、この問題に苦労しています。

私は2つのテーブルを持っています:

audit : audit_seq (主キー)、user_code (外部キー)、audit_date

ユーザー名: user_code (主キー)、user_name

監査テーブルには、ユーザーの外部キー フィールド (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");
    }
}
4

1 に答える 1

3

テーブルusernameはエンティティにマップする必要があります(クラスUserNameUserプロパティを区別するためにを使用しますUserName)。次に、監査で参照として使用できます。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ようにマッピングを調整できます。

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();
    }
}

これで、Auditを参照できるようになりましたUser。一部の参照ユーザーが欠落しているという事実を無視します(.NotFound.Ignore())。そして、もしあれば、私たちのUserNameプロパティはその名前を返します。

于 2012-12-04T15:01:19.180 に答える