我是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");
}
}
答案 0 :(得分:3)
表username
应该映射到实体(类UserName
?我将使用User
来区分其属性UserName
)。然后它可以在 Audit 中用作参考。在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
属性将返回其名称。