C# NHibernate:将查询结果映射到映射文件中的列表属性

C# NHibernate:将查询结果映射到映射文件中的列表属性,c#,nhibernate,file,collections,mapping,C#,Nhibernate,File,Collections,Mapping,我有一个联系人类,我想为用户提供城市和省的自动完成 我想我在Contact对象中创建了两个集合,并从Contact表中加载城市和省份: public class Contact { public virtual string Name { get; set; } public virtual string City { get; set; } public virtual string Province { get; set; } public v

我有一个联系人类,我想为用户提供城市和省的自动完成

我想我在Contact对象中创建了两个集合,并从Contact表中加载城市和省份:

public class Contact {  
    public virtual string Name { get; set; }  
    public virtual string City { get; set; }  
    public virtual string Province { get; set; }  
    public virtual IList<String> Cities { get; set; }  
    public virtual IList<String> Provinces { get; set; }  
}
公共类联系人{
公共虚拟字符串名称{get;set;}
公共虚拟字符串City{get;set;}
公共虚拟字符串{get;set;}
公共虚拟IList城市{get;set;}
公共虚拟IList省{get;set;}
}
并具有如下映射文件:

<class name="Contact">  
    <id name="Id">  
        <generator class="native">  
            <param name="sequence">contact_id_seq</param>  
        </generator>  
    </id>  
<property name="Name" />  
<property name="City" />  
<property name="Province" />  
<property name="Cities" type="string" formula="SELECT DISTINCT city FROM contact" />  
<property name="Provinces" type="string" formula="SELECT DISTINCT province FROM contact" />  
</class>

联系方式_id _seq
但这是行不通的。有什么办法可以做到这一点吗


谢谢。

属性上的公式是定义属性值的SQL表达式,因此select应该返回单个值。此外,如果按照您建议的方式工作,您将在每个实体上复制这些值,那么最好将其定义为静态列表,并在创建新会话时使用自定义hql填充该值

请从阅读基本文档开始:我正试图将行程保存到数据库中。有没有加载或不加载关系的方法?只是从一个将运行上述查询并加载此IList属性的视图?感谢您的回复。您可以将视图映射为任何其他表,您可以指定mutable=false以强制执行您不能在视图中写入的约束。我想静态列表对于此目的更有意义。谢谢你的意见。