J'ai une table appelée UserPermissions avec un FK dans la table users par userId, puis une colonne de chaîne pour la valeur de chaîne d'une énumération.Mappage d'une liste d'énumérations
L'erreur que je vois est NHibernate.MappingException: Une association de la table UserPermissions fait référence à une classe unmapped: GotRoleplay.Core.Domain.Model.Permission
Ma permission Enum:
public enum Permission
{
[StringValue("Add User")]
AddUser,
[StringValue("Edit User")]
EditUser,
[StringValue("Delete User")]
DeleteUser,
[StringValue("Add Content")]
AddContent,
[StringValue("Edit Content")]
EditContent,
[StringValue("Delete Content")]
DeleteContent,
}
la propriété dans ma classe User:
public virtual IList<Permission> Permissions { get; set; }
ma table de base de données:
CREATE TABLE dbo.UserPermissions
(
UserPermissionId int IDENTITY(1,1) NOT NULL,
UserId int NOT NULL,
PermissionName varchar (50) NOT NULL,
CONSTRAINT PK_UserPermissions PRIMARY KEY CLUSTERED (UserPermissionId),
CONSTRAINT FK_UserPermissions_Users FOREIGN KEY (UserId) REFERENCES Users(UserId),
CONSTRAINT U_User_Permission UNIQUE(UserId, PermissionName)
)
Ma tentative de cartographier la propriété des autorisations de mon objet utilisateur:
HasManyToMany(x => x.Permissions)
.WithParentKeyColumn("UserId")
.WithChildKeyColumn("PermissionName")
.WithTableName("UserPermissions")
.LazyLoad();
Qu'est-ce que je fais mal qu'il ne peut pas mapper l'autorisation à une liste de valeurs ENUM?
Ainsi, après beaucoup de bricoler, je fini par avoir à créer un nouvel objet appelé UserPermission et la carte à la table UserPermissions avec une propriété Permission en utilisant mon enum comme type de données. Cela fonctionne très bien, mais des autorisations peuvent être attachées aux rôles et aux utilisateurs, ce qui signifie que ma requête sélectionnée pour obtenir TOUTES les permissions assignées à un utilisateur (y compris tous leurs rôles) nécessite un ensemble compliqué d'instructions linq. Je préférerais ne pas faire ça. Quelqu'un a des idées? – Josh