Ich habe eine Tabelle namens DomainType, die mehrere Name/Wert-Paare zusammen mit einer Domain-Spalte enthält, die Zeilen identifiziert, die zusammen gehören. Ich habe zwei C# -Klassen namens PackageType und ComponentType, die beide ihre Daten in derselben Tabelle speichern, wobei ihre Domänenwerte "PackageType" bzw. "ComponentType" sind. Ich dachte, ich könnte das NHibernate-Diskriminator-Konzept in meinen hbm.xml-Dateien verwenden, um diese zu definieren, aber jedes Mal, wenn ich nach PackageTypes in meiner App frage, bekomme ich alle Zeilen aus der DomainType-Tabelle zurück.NHibernate Discrimator
An diesem Punkt bin ich nicht sicher, ob meine Mapping-Logik/Syntax schlecht ist oder ob ich das Konzept für Diskriminatoren einfach falsch verstehe. Dies sind schließlich keine Unterklassen, vielleicht ist dies nicht die richtige Strategie (?).
Hier ist die Mapping-Datei für meine PackageType Tabelle:
<class name="PackageType" table="DomainType"
discriminator-value="PackageType" dynamic-update="true">
<id name="Id" column="Id" type="Int32" unsaved-value="0">
<generator class="identity" />
</id>
<discriminator column="Domain" type="AnsiString" not-null="true" />
<property name="Description" column="Description"
type="AnsiString" length="100" not-null="true" />
</class>
Hier ist der C# -Code, die alle Zeilen aus der DomainType Tabelle zurückgibt (auch diejenigen, bei denen Domain = "Component"):
IEnumerable<PackageType> rslt = GetSession().Query<PackageType>().ToList();
Diskriminatoren arbeiten nur auf Sub-Klassen (glaube ich) – Rippo