2011-09-07 8 views
12

クラス:NHibernateの順応マッピング "タイプを判別できません..."

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; } 
} 

マッピング:

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); 
              }); 
    } 
} 

エラー:

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

私はそれは単純なものです願っていますこれはConformistマッピングを使った私の最初のプロジェクトです。多分私は何かを見落としているだけかもしれません。

答えて

30

nhusersメーリングリストに関するディスカッションから。

同じ問題が発生しました。

あなたは関係のタイプを定義していません。 action => action.OneToMany());行を参照してください。以下のマッピングで

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「ConventionModelMapper」から「ModelMapper」への切り替え時に同じ問題が発生しましたが、これが私の答えにつながりました。 「SimpleModelInspector」は、各コレクションに使用するアクションを示します。 – Lukazoid

+2

同じです。共有してくれてありがとう、エラーメッセージはむしろ謎です。 – Dav

+0

@Pan'sとtom.dietrichのノートを見ると、 "Bag()"と "Set()"の両方のメソッドに対してアクションを提供する必要があります。どんな条件の下でそれが(これは明らかにオプションの)paramをオフにすることが許されているか/有益であるか疑問に思う。もしそうでなければ、例外の調査/強制事件の徹底を要求する必要がある。 – user1172173

3

問題が他のクラスの私のセットマッピングにあったことが判明しました。マッピングのアクションを指定しないと、この(誤解を招く)エラーがスローされます。

関連する問題