我是 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();
}
}
现在我们有了引用User
的Audit
。它将忽略一些引用的用户丢失的事实 (.NotFound.Ignore()
)。如果有的话,我们的 UserName
属性将返回其名称。
关于nhibernate - 流畅的 NHibernate 映射具有孤立子记录的父/子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13704723/