2015-12-14 20 views
5

Il dominio:Fluent NHibernate Automapping con le sostituzioni: Mappa una collezione non mappata classe base

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

public abstract class BaseClass 
{ 
} 

public class SubClass1 : BaseClass 
{ 
} 

public class SubClass2 : BaseClass 
{ 
} 

ottengo l'errore Association references unmapped class, anche se entrambe le classi secondarie sono mappati. Ovviamente, la classe base stessa non è mappata. Si prega di suggerire come risolvere questo.

Modifica

avrei preferito che prima di chiudere una domanda come duplicato ad un altro, solo che non leggere, ma anche la cura per comprendere entrambe le domande.

Ho visto la domanda Error: fluent NHibernate mapping which references mapping in different assembly. Ma parla di uno scenario diverso.

Il mio scenario è come di seguito.

public class Product 
{ 
    public int Id { get; set; } 
    public ICollection<BasePricingRule> PricingRules{ get; set; } 
} 

public abstract class BasePricingRule 
{ 
    public int Id { get; set; } 
    //other properties 
} 

//Several concrete classes inherit from BasePricingRule. 

Voglio avere una tabella per classe concreta e nessuna tabella per la classe base. Pertanto, non esiste alcuna mappatura per lo BasePricingRule. Sto permettendo alle classi di ottenere una mappatura automatica, occasionalmente fornendo le sostituzioni necessarie. Ho creato un override di automapping per la classe del prodotto come di seguito.

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

mi è stato vedere esempi come http://ayende.com/blog/3941/nhibernate-mapping-inheritance per mappature di successione. Ma questi esempi in realtà non affrontano il problema che sto affrontando. Più che l'errore, mi piacerebbe sapere come mappare questo dominio tramite NHibernate fluente, preferibilmente usando le sostituzioni automapping.

+0

si prega di inviare la vostra configurazione, hai mappare il montaggio per la mappatura fluente? controlla questo post http://stackoverflow.com/a/6227248/1225337 –

+0

Sì, l'ho fatto. La mappatura dei tipi non è il problema qui. Non ho mappato il tipo di classe base, ma solo i tipi di sottoclasse concreti per i quali desidero avere una tabella. Il link a cui punti non affronta questo problema ereditario. –

risposta

0

Il punto è che, anche per l'approccio Table Per Concrete Class, sarà necessario mappare la classe base. Solo non come pensi. Si dovrebbe dare un'occhiata a questo grande articolo: www.codeproject.com/Articles/232034/Inheritance-mapping-strategies-in-Fluent-Nhibernat

Sarebbe più o meno così:

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(); 
    } 
} 
Problemi correlati