2011-09-07 17 views
12

La classe:NHibernate Conformista Mapping "Impossibile determinare il tipo ..."

public class SOPProcess : ISOPProcess 
{ 
    public virtual Guid Id { get; set; } 
    public virtual SOP SOP { get; set; } 
    public virtual ProcessType Type { get; set; }  

    public virtual SOPProcessInput Input { get; set; } 
    public virtual SOPProcessOutput Output { get; set; } 
    public virtual SOPProcessMeasures Measures { get; set; } 

    public virtual decimal YieldFactor { get; set; } 

    public virtual SOPProcess PreviousProcess { get; set; } 
    public virtual SOPProcess NextProcess { get; set; } 
} 

la mappatura:

public class SOPProcessMap : ClassMapping<SOPProcess> 
{ 
    public SOPProcessMap() 
    { 
     Id(s => s.Id, i => i.Generator(Generators.GuidComb)); 

     Property(s => s.YieldFactor);   

     ManyToOne(s => s.SOP, m => 
           { 
            m.Column("SopId"); 
            m.Cascade(Cascade.All); 
           }); 

     ManyToOne(s => s.Type, m => 
           { 
            m.Column("ProcessTypeId"); 
            m.Cascade(Cascade.All); 
           }); 

     ManyToOne(s => s.NextProcess, m => 
             { 
              m.Column("NextProcessId"); 
              m.Cascade(Cascade.All); 
             }); 

     ManyToOne(s => s.PreviousProcess, m => 
              { 
               m.Column("PreviousProcessId"); 
               m.Cascade(Cascade.All); 
              }); 
    } 
} 

l'errore:

NHibernate.MappingException: Could not determine type for: MES.ProcessManager.SOP.SOPProcess, MES.ProcessManager, for columns: NHibernate.Mapping.Column(id)

spero che sia qualcosa di semplice , questo è il mio primo progetto che utilizza la mappatura Conformist, quindi forse sto solo trascurando qualcosa.

risposta

30

Dalla nostra discussione sulla mailing list di nhusers.

Ho incontrato gli stessi problemi.

Non è stato definito il tipo di relazione. Vedere la riga action => action.OneToMany()); nella mappatura qui sotto.

public class SportMap : ClassMapping<Sport> 
{ 
    public SportMap() 
    { 
     Id(x => x.Id, map => 
     { 
      map.Column("Id"); 
      map.Generator(Generators.GuidComb); 
     }); 

     Property(x => x.Name, map => 
     { 
      map.NotNullable(true); 
      map.Length(50); 
     }); 

     Bag(x => x.Positions, map => 
     { 
      map.Key(k => k.Column(col => col.Name("SportId"))); 
      map.Cascade(Cascade.All | Cascade.DeleteOrphans); 
     }, 
     action => action.OneToMany()); 

     Property(x => x.CreateDate); 
     Property(x => x.CreateUser); 
     Property(x => x.LastUpdateDate); 
     Property(x => x.LastUpdateUser); 
    } 
} 
+2

+1 Ho riscontrato questo stesso problema quando si passa dall'uso di un 'ConventionModelMapper' a un' ModelMapper', questo mi ha portato alla risposta. Il 'SimpleModelInspector' calcola l'azione da usare per ogni collezione. – Lukazoid

+2

Lo stesso qui. Grazie per la condivisione, il messaggio di errore è piuttosto enigmatico. – Dav

+0

Quindi, osservando le note di Fran's e tom.dietrich, è necessario fornire un'azione per entrambi i metodi "Bag()" e "Set()". Chiedendosi in quali condizioni è permesso/utile lasciare questo param (apparentemente facoltativo); se nessuno, dovrebbe essere richiesto, costringendo le indagini/riducendo del tutto gli incidenti dell'eccezione. – user1172173

3

Si è scoperto che il problema era nelle mie mappature Set in altre classi. Se non si specifica l'azione per la mappatura, si genera questo errore (fuorviante).

Problemi correlati