次のユーザーエンティティがあります。
public class User
{
public virtual int Id { get; set; }
public virtual string Username { get; set; }
public virtual string UsernameLowercase { get { return Username.ToLowerInvariant(); } }
public virtual string Password { get; set; }
public virtual string Email { get; set; }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
if (ReferenceEquals(this, obj))
return true;
var otherUser = obj as User;
return (0 == string.CompareOrdinal(UsernameLowercase, otherUser.UsernameLowercase));
}
public override int GetHashCode()
{
return UsernameLowercase.GetHashCode();
}
}
および次の役割エンティティ:
public class Role
{
public virtual int Id { get; set; }
public virtual string RoleName { get; set; }
public virtual string RoleNameLowercase { get { return RoleName.ToLowerInvariant(); } }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
if (ReferenceEquals(this, obj))
return true;
var otherRole = obj as Role;
return (0 == string.CompareOrdinal(RoleNameLowercase, otherRole.RoleNameLowercase));
}
public override int GetHashCode()
{
return RoleNameLowercase.GetHashCode();
}
}
ユーザーには多くの役割を割り当てることができるため、UserInRoleという3番目のエンティティを作成しました。
public class UserInRole
{
public virtual User User { get; set; }
public virtual Role Role { get; set; }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
if (ReferenceEquals(this, obj))
return true;
var other = obj as UserInRole;
return (Role == other.Role && User == other.User);
}
public override int GetHashCode()
{
return User.GetHashCode() ^ Role.GetHashCode();
}
}
流暢なnhibernateを使用してUsersInRolesテーブルとUserテーブルおよびRoleテーブルをマッピングして、ユーザーを削除すると、UsersInRolesテーブルで定義されているすべてのユーザーのロールが自動的に削除されるようにします。UserInRoleエンティティの現在のマッピングクラスは次のとおりです。
public class UserInRoleMapping : ClassMap<UserInRole>
{
public UserInRoleMapping()
{
Table("UsersInRoles");
CompositeId().
KeyReference(x => x.User,k => k.Not.Lazy(), "UserId").
KeyReference(x => x.Role, k => k.Not.Lazy(), "RoleId");
}
}
あなたの助けに感謝します。