Ich habe eine Tabelle namens UserPermissions mit einem FK in der Benutzer-Tabelle von userId und dann eine Zeichenfolge-Spalte für den String-Wert einer Aufzählung.Mapping einer Liste von Enums
Der Fehler, den ich sehen bin, ist NHibernate.MappingException: Ein Verein aus der Tabelle UserPermissions bezieht sich auf eine nicht zugeordnete Klasse: GotRoleplay.Core.Domain.Model.Permission
meine Erlaubnis 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,
}
das Anwesen in meiner Benutzerklasse:
public virtual IList<Permission> Permissions { get; set; }
Meine Datenbanktabelle:
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)
)
Mein Versuch, die Berechtigungen Eigentum meines Benutzerobjekt in Abbildung:
HasManyToMany(x => x.Permissions)
.WithParentKeyColumn("UserId")
.WithChildKeyColumn("PermissionName")
.WithTableName("UserPermissions")
.LazyLoad();
Was mache ich falsch, dass es nicht die Erlaubnis zu einer Liste von ENUM-Werte abbilden?
So nach vieler Bastelei, ich ein neues Objekt namens Userpermission zu schaffen, die am Ende und wo es zu die UserPermissions-Tabelle mit einer Permission-Eigenschaft, die meine enum als den Datentyp verwendet. Dies funktioniert einwandfrei, aber Berechtigungen können Rollen und Benutzern zugeordnet werden, was bedeutet, dass meine SELECT-Abfrage, um JEDER Berechtigung, die einem Benutzer zugewiesen wird (einschließlich all ihrer Rollen), einen komplizierten Satz von Linq-Anweisungen erfordert. Ich würde das lieber nicht tun. Hat jemand Ideen? – Josh