1

我有一个实体,叫做“竞争”

在比赛中,我有一个财产:

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

但是,这会引发此错误:

{“无法确定类型:System.Collections.Generic.IEnumerable`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture =中性,PublicKeyToken=b77a5c561934e089,对于列:NHibernate.Mapping.Formula((SELECT DISTINCT EventCode from tblSomeOtherTable WHERE EventID = [ID]))"}

值得一提的是 tblSomeOtherTable 没有被映射,也不会被映射。

我错过了什么?

4

1 回答 1

1

尝试将“IEnumerable”更改为“ICollection”。完成后,将 Map 更改为具有以下规范的 HasMany:

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

当然,如果另一个表实际上没有被称为“tblSomeOtherTable”(我希望它不是),那么也要进行修改。

我从未真正使用过“元素”,但我认为这应该可行。

于 2012-08-09T16:43:08.840 回答