NHibernate Von One-To-Many to One-To-One
-
26-09-2019 - |
Frage
Ich schaffe das Sicherheitssystem für die Software im Erstellen und ich würde gerne wissen, wie ich die folgenden in NHibernate tun kann (wenn überhaupt möglich)
Benutzerkontenklasse:
public class UserAccount
{
public virtual int UserID { get; set; }
public virtual String Username { get; set; }
public virtual Privilege InvoicePrivilege { get; set; }
public virtual Privilege TradePrivilege { get; set; }
}
Berechtigungsklasse:
public class Privilege
{
public virtual bool Read { get; set; }
public virtual bool Write { get; set; }
public virtual bool Delete { get; set; }
public virtual bool Modify { get; set; }
}
werde ich eine große Anzahl dieser Berechtigungsobjekte, die sein (eine für jede gehandelte Einheit) so in der Datenbank i die folgenden Tabellen haben:
Useraccounts ( Benutzer-ID , Benutzername)
Privilegien ( Benutzer-ID, PrivilegeType , Lesen, Schreiben, Ändern, Löschen)
Wie kann ich die InvoicePrivielge Eigenschaft aus dem Benutzerkonto der Karte (UserID, 'Rechnung') Privilege.
Ich kann dies mit many-to-one tun, aber ich mag nicht, eine Sammlung von Privilegien, ich würde es eher Karte seine Eigenschaft.
Lösung
Ich denke, eine Möglichkeit, dies zu tun ist, zwei Unterklassen der Privilege-Klasse zu erstellen:
public class InvoicePrivilege : Privilege
{
}
public class TradePrivilege : Privilege
{
}
und die Diskriminator Spalte und Wert gesetzt. In fließend Mapping:
public class PrivilegeMap : ClassMap<Privilege>
{
public PrivilegeMap()
{
// ...
DiscriminateSubClassesOnColumn("PrivilegeType")
.SubClass<InvoicePrivilege>("Invoice", x => x.Map( ... ))
.SubClass<TradePrivilege>("Trade", x => x.Map( ...));
}
}
und verwenden Sie die Unterklassen in der UserAccount
public virtual InvoicePrivilege InvoicePrivilege { get; set; }
public virtual TradePrivilege TradePrivilege { get; set; }