使用公式来映射IEnumerable字符串

时间:2012-08-09 14:51:48

标签: c# fluent-nhibernate

我有一个名为“竞争”的实体

在比赛中,我有一个属性:

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,版本= 4.0.0.0,文化=中性,   PublicKeyToken = b77a5c561934e089,用于列:   NHibernate.Mapping.Formula((来自SELECT的DISTINCT EventCode)   tblSomeOtherTable WHERE EventID = [ID]))“}

值得一提的是,tblSomeOtherTable未映射,也不会映射。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

尝试更改您的IEnumerable&#39;到&#39; ICollection。&#39;完成后,使用以下规范将Map更改为HasMany:

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

当然,如果另一张桌子实际上没有被称为“tblSomeOtherTable”&#39; (我希望它不是)然后进行修改。

我从未真正使用过&#39;元素&#39;但我认为这应该有用。