私はこのエンティティ関係を持っています。
public abstract class UserGroup
{
public virtual int UserGroupId { get; set; }
public virtual int GroupType { get; set; }
public virtual string GroupName { get; set; }
public virtual IList<UserGroupMember> GroupMembers { get; set; }
}
public class UserGroupMember
{
public virtual int UserGroupMemberId { get; set; }
public virtual User User { get; set; }
public virtual UserGroup UserGroup { get; set; }
}
UserGroup
は基本クラスであり、 によって識別されるいくつかの派生クラスがあることに注意してくださいUserGroup.GroupType
。クラス階層ごとの単一テーブル継承マッピング戦略を使用しています。
流暢な NHibernate マッピング:
public class UserGroupMap : BaseClassMap<UserGroup>
{
public UserGroupMap()
{
Table("UserGroup");
Id(x => x.UserGroupId);
DiscriminateSubClassesOnColumn("GroupType");
Map(x => x.GroupName);
HasMany(x => x.GroupMembers)
.KeyColumn("UserGroupId")
.Cascade.AllDeleteOrphan()
.Inverse();
}
}
public class UserGroupMemberMap: BaseClassMap<UserGroupMember>
{
public UserGroupMemberMap()
{
Table("UserGroupMember");
Id(x => x.UserGroupMemberId);
References(x => x.User, "UserId")
.Cascade.SaveUpdate();
References(x => x.UserGroup, "UserGroupId")
.Cascade.SaveUpdate();
}
}
これが私が達成したいことです:
UserGroupMember も基本クラスにし、ディスクリミネータで識別させたいと思いUserGroup.GroupType
ます。これは可能ですか?
この質問を別の言い方をすると、次の行を追加できれば素晴らしいと思います。
DiscriminateSubClassesOnColumn("UserGroup.GroupType");
にUserGroupMemberMap