Unter dem folgenden Objektmodell zu verwenden:Ist es möglich, einen NHibernate Typdiskriminator als Teil eines Fremdschlüssels
public abstract class Entity
{
public Guid Id { get; set; }
}
public class Category : Entity
{
public string Name { get; set; }
public ICollection<LocalizedProperty> LocalizedProperties { get; set; }
}
public class Product : Entity
{
public string Name { get; set; }
public ICollection<LocalizedProperty> LocalizedProperties { get; set; }
}
public class LocalizedProperty : Entity
{
public string CultureName { get; set; }
public string PropertyName { get; set; }
public string PropertyValue { get; set; }
}
Ist es möglich, zusammen mit der Unternehmens-ID als Fremdschlüssel einen Typdiskriminator zu verwenden. Die Idee ist, dass die resultierende LocalizedProperties Tabelle würde:
LocalizedProperties
-------------------
Id
EntityType
EntityId
CultureName
PropertyName
PropertyValue
Ich weiß, das ist möglich, bei 'Tabelle pro Unterklasse-Mapping, wo jeder meiner „Lokalisieren“ Entitäten von einer Basis lokalisierte Entitätsklasse erben, was wiederum die Verknüpfung mit LocalizedProperty. Ich möchte diese zusätzliche Vererbungsebene jedoch lieber nicht haben, wenn das obige möglich ist.
Danke, Ben
UPDATE
Dank Diego für die Lösung, die Conform verwenden. Für die von Ihnen traditionelle Mapping-Dateien verwenden, habe ich das Beispiel von http://fabiomaulo.blogspot.com/2010/11/conform-any-to-many.html
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" namespace="ConfOrm.UsageExamples.CreateXmlMappingsInBinFolder" assembly="ConfOrm.UsageExamples" xmlns="urn:nhibernate-mapping-2.2">
<class name="Blog">
<id name="Id" type="Guid">
<generator class="guid.comb" />
</id>
<property name="Title" />
<property name="Subtitle" />
<set name="Tags" cascade="all" where="TagedItemClass = 'ConfOrm.UsageExamples.CreateXmlMappingsInBinFolder.Blog'">
<key column="TagedItemId" foreign-key="none" />
<one-to-many class="Tag" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" namespace="ConfOrm.UsageExamples.CreateXmlMappingsInBinFolder" assembly="ConfOrm.UsageExamples" xmlns="urn:nhibernate-mapping-2.2">
<class name="Tag">
<id name="Id" type="Guid">
<generator class="guid.comb" />
</id>
<property name="Name" />
<any id-type="Guid" name="TagedItem">
<column name="TagedItemClass" />
<column name="TagedItemId" />
</any>
</class>
</hibernate-mapping>
Kannst du mir erklären, wie ich dieses Mapping in meinem Beispiel verwenden würde, wenn ich darum kämpfe, es zu sehen, basierend auf dem Beispiel von nhForge? –
@Ben Überprüfen Sie den neuen Link. –
das sieht perfekt aus. Wissen Sie, ob dies mit herkömmlichen Mapping erreicht werden kann oder ist es spezifisch für conform? –