2012-08-09 32 views
1

我有一個實體,所謂的「競爭」使用公式來映射的IEnumerable字符串

競賽中,我有一個屬性:

IEnumerable<string> EventCodes {get;set;} 

我想要做的,是一個子查詢時從我的映射文件映射此 摘錄:

public CompetitionMap() 
{ 
    Id(x => x.Id); 

    Map(x => x.DisciplineCodes) 
     .Formula("(SELECT DISTINCT DisciplineCode 
      from tblSomeOtherTable WHERE EventID = [ID])"); 

    Table("tblCompetitions"); 
} 

然而,這是引發此錯誤:

{"Could not determine type for: System.Collections.Generic.IEnumerable`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, for columns: NHibernate.Mapping.Formula((SELECT DISTINCT EventCode from tblSomeOtherTable WHERE EventID = [ID]))"}

值得一提的是tblSomeOtherTable沒有被映射,也不會被映射。

我錯過了什麼?

回答

1

嘗試將您的'IEnumerable'更改爲'ICollection'。一旦你做到了這一點,該地圖具有以下規格更改爲的hasMany:

HasMany(x => x.EventCodes) 
      .Table("tblSomeOtherTable") 
      .KeyColumn("EventID") 
      .Element("DisciplineCode") 
      .AsSet() 
      .ReadOnly(); 

當然,如果其他表實際上並沒有所謂的「tblSomeOtherTable」(我希望這不是),那麼進行修改。

我從來沒有真正使用'元素',但我認爲這應該工作。