2011-03-17 167 views
1

我在嘗試在流利的nhibernate中進行一對多映射時遇到了NHibernate.MappingException。 下面是從我的實體片斷及其映射類:流利Nhibernate - 一對多映射問題

public class ReportRequest : IReportRequestToBeFullyLoaded 
{ 
    public virtual Int32? Id { get; set; } 
    public virtual string Description { get; set; } 
    public virtual ISet<ReportOutputEmail> ReportOutputEmails { get; set; } 
} 

public class ReportOutputEmail 
{ 
    public virtual string RecipientAddress { get; set; } 
    public virtual string Message { get; set; } 
    public virtual ReportRequest ReportRequest { get; set; } 
} 

public class ReportRequestMap : ClassMap<ReportRequest> 
{ 
    public ReportRequestMap() 
    { 
     Table("ReportRequest"); 
     Id(x => x.Id).UnsavedValue(null).GeneratedBy.Native(); 
     Map(x => x.Description); 
     HasMany(x => x.ReportOutputEmails).Table("ReportOutputEmail") 
      .ForeignKeyConstraintName("FK_ReportOutputEmail_ReportRequest") 
      .KeyColumn("ReportRequestId") 
      .AsSet() 
      .Inverse() 
      .Cascade.AllDeleteOrphan(); 
    } 
} 

public class ReportOutputEmailMap: ClassMap<ReportOutputEmail> 
{ 
    public ReportOutputEmailMap() 
    { 
     References(x => x.ReportRequest) 
      .ForeignKey("FK_ReportOutputEmail_ReportRequest") 
      .Column("ReportRequestId"); 
     Map(x => x.RecipientAddress); 
     Map(x => x.Message); 
    } 
} 

有一些問題有一個一對多的映射ReportRequest-> ReportOutputEmail
四處錯誤:

Error: NHibernate.MappingException: (XmlDocument)(3,6): XML validation error: The 
element 'class' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 
'property' in namespace 'urn:nhibernate-mapping-2.2'. List of possible elements expected: 'meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id' in  namespace 'urn:nhibernate-mapping-2.2'. 

任何人都可以幫忙搞清楚。

謝謝!

回答

2

您的ReportOutputEmail沒有身份,如果它將成爲實體,則需要一個身份。另外,我建議你升級你的Fluent NHibernate副本,因爲這是從1.1以來更有用的方式報告的(你會得到一個缺少身份的消息)。

+0

感謝您的回覆,如果沒有ReportOutputEmail的單獨ID,我無法做到這一點嗎?因爲我想要的只是ReportRequest.ReportRequestId來標識ReportOutputEmail中的記錄。 – iniki 2011-03-17 14:55:54

+0

你已經指定'ReportRequest'可以有很多'ReportOutputEmail'。您不能使用「ReportRequestId」作爲主鍵,因爲多個記錄可能具有相同的值。 – 2011-03-17 15:50:33

+1

謝謝!只是知道這是NHibernate中的設計。如果你的表沒有任何類型的鍵,那麼它不是一個實體。 – iniki 2011-03-17 16:53:23