nhibernate - 流畅的 NHibernate 映射具有孤立子记录的父/子表

标签 nhibernate foreign-key-relationship fluent outer-join orphan

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

我有两个表:

审核: audit_seq(主键), 用户代码(外键), 审核日期

用户名: 用户代码(主键), 用户名

审计表包含带有用户外键字段 (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");
    }
}

最佳答案

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

用户映射

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

现在我们有了引用UserAudit。它将忽略一些引用的用户丢失的事实 (.NotFound.Ignore())。如果有的话,我们的 UserName 属性将返回其名称。

关于nhibernate - 流畅的 NHibernate 映射具有孤立子记录的父/子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13704723/

相关文章:

SQL:在 OneToOne 关系中删除子项(但理论上是父项)时删除父项

mysql - 我可以使用 SQL 语句中的 JOIN 无法执行的外键执行哪些操作?

entity-framework - 具有多个父属性、单个子集合的 EF6 自引用表

fluent - 使用字符串枚举创建 Fluent 模型

nhibernate - Session.SetBatchSize 不会更改批量大小

c# - Linq 表达式中的条件运算符导致 NHibernate 异常

ruby-on-rails - 设置自定义 foreign_key 的奇怪问题

c# - NHibernate 3.1 与 Linq 的迁移问题

c# - nHibernate 类中的条件 getter

c# - Fluent NHibernate AutoMapper 中的可访问性忽略属性映射