2009-05-25 9 views
23

J'ai une classe mappée en nhibernate fluide mais je souhaite que l'une des propriétés de classes soit ignorée par le mappage.Comment savoir que NHibernate est fluide pour ne pas mapper une propriété de classe

Avec classe et cartographie ci-dessous je reçois cette erreur:

Les types suivants ne peuvent pas être utilisés comme proxies: iMasterengine.Data.Model.Calendar: méthode get_HasEvents devrait être virtuelle

//my class 
public class Calendar : IEntity { 
    public virtual int Id { get; private set; } 
    public virtual string Name { get; set; } 
    public virtual string SiteId { get; set; } 
    public virtual IList<CalendarEvent> Events { get; set; } 
    //ignore this property 
    public bool HasEvents { get { return Events.Count > 0; } } 
} 

//my mapping 
public class CalendarMap : ClassMap<Calendar> { 
    public CalendarMap() { 
     Id(x => x.Id); 
     Map(x => x.Name); 
     Map(x => x.SiteId); 
     HasMany(x => x.Events).Inverse(); 
     //what do I put here to tell nhibernate 
     //to ignore my HasEvents property? 
    } 
} 

Répondre

13
map.IgnoreProperty(p => p.What); 
+10

Où cette ligne devrait-elle être placée? J'ai pensé que cela irait dans le constructeur CalendarMap, mais je ne vois pas une instance de carte disponible là. – ddc0660

+0

Il devrait être ajouté lorsque vous créez la configuration. Voir ce lien [http://wiki.fluentnhibernate.org/Auto_mapping#Ignoring_properties](http://wiki.fluentnhibernate.org/Auto_mapping#Ignoring_properties) – Rajeesh

+17

IgnoreProperty() est seulement pour * automapping * si vous spécifiez vous-même vos mappings (c'est-à-dire en utilisant classmap) alors cela n'est pas pertinent. L'affiche a inclus un classmap, et n'a rien dit à propos de l'automapping, donc je ne vois pas quelle pertinence cela a. – UpTheCreek

26

Vous pouvez juste faire HasEvents virtuelle dans la classe:

public virtual bool HasEvents { get { return Events.Count > 0; } } 

Vous n'avez rien à ajouter aux mappages.

Vous ne devez indiquer la propriété d'une propriété que si vous utilisez Auto Mapping, ce que je ne pense pas être.

+0

Je pense que cela ne fonctionne pas avec linq – tykovec

+1

Ne fonctionne pas pour moi en passant par Linq sur une ancienne version de NHibernat.e – alphadogg

Questions connexes