2015-12-14 3 views
5

Die Domain:Fluent NHibernate Automapping mit Überschreibungen: Karte, um eine nicht zugeordnete Basisklasse Sammlung

public class BaseClassClient 
{ 
    public virtual ICollection<BaseClass> BaseObjects{ get; set; } 
} 

public abstract class BaseClass 
{ 
} 

public class SubClass1 : BaseClass 
{ 
} 

public class SubClass2 : BaseClass 
{ 
} 

ich den Fehler Association references unmapped class bekommen, obwohl beide die Unterklassen zugeordnet werden. Offensichtlich ist die Basisklasse selbst nicht zugeordnet. Bitte schlagen Sie vor, wie Sie das lösen können.

bearbeiten

Ich möchte lieber, dass vor eine Frage als Duplikat zu einem anderen zu schließen, sie lesen nicht nur, sondern auch sowohl die Fragen zu verstehen kümmern.

Ich habe die Frage Error: fluent NHibernate mapping which references mapping in different assembly gesehen. Aber es geht um ein anderes Szenario.

Mein Szenario ist wie folgt.

Ich möchte eine Tabelle pro konkrete Klasse und keine Tabelle für die Basisklasse haben. Daher gibt es keine Zuordnung für die BasePricingRule. Ich erlaube den Klassen, automatisch zugeordnet zu werden, indem ich gelegentlich notwendige Überschreibungen zur Verfügung stelle. Ich habe eine automatische Überschreibung für die Produktklasse wie folgt erstellt.

public void Override(FluentNHibernate.Automapping.AutoMapping<Product> mapping) 
    { 
     mapping.HasMany(product => product.PricingRules); //Not really sure 
                  // about how to map this. 
    } 

Ich habe Beispiele wie http://ayende.com/blog/3941/nhibernate-mapping-inheritance für die Vererbung Mappings zu sehen. Aber diese Beispiele behandeln das Problem, mit dem ich konfrontiert bin, nicht. Mehr als der Fehler würde ich gerne wissen, wie ich diese Domäne über fließende NHibernate abbilden sollte, vorzugsweise mit Autopping-Overrides.

+0

bitte Ihre Konfiguration veröffentlichen, Sie Montage für fließend Mapping Karte haben? Überprüfen Sie diesen Beitrag http://stackoverflow.com/a/6227248/1225337 –

+0

Ja, tat ich. Typ-Mapping ist hier nicht das Problem. Ich habe den Basisklassentyp nicht definiert, sondern nur die konkreten Unterklassen, für die ich eine Tabelle haben möchte. Der Link, auf den Sie verweisen, behandelt dieses Vererbungs-Problem nicht. –

Antwort

0

Der Punkt ist, dass Sie sogar für die Tabelle Per Concrete Class-Ansatz die Basisklasse zuordnen müssen. Nur nicht so, wie du vielleicht denkst. Sie sollten einen Blick auf diesen großen Artikel nehmen: www.codeproject.com/Articles/232034/Inheritance-mapping-strategies-in-Fluent-Nhibernat

Es wäre mehr oder weniger wie folgt aus:

public class BaseClassMap : ClassMap<BaseClass> { 
    public BaseClassMap() { 
     // indicates that this class is the base 
     // one for the TPC inheritance strategy and that 
     // the values of its properties should 
     // be united with the values of derived classes 
     UseUnionSubclassForInheritanceMapping(); 
    } 
} 

public class SubClass1Map : SubclassMap<SubClass1> { 
    public SubClass1Map() { 
     Table("SubClass1Table"); 
     Abstract(); 
    } 
} 

public class SubClass2Map : SubclassMap<SubClass2> { 
    public SubClass1Map() { 
     Table("SubClass2Table"); 
     Abstract(); 
    } 
} 
Verwandte Themen