2

我是 Fluent NHibernate 和 C#.NET 的新手,正在努力解决这个问题。

我有两张桌子:

审计: 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应该映射到一个实体(类UserName?我将使用User来区分它的属性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 回答