Nhibernate与linq问题

Nhibernate与linq问题,linq,nhibernate,nhibernate-mapping,nhibernate-3,Linq,Nhibernate,Nhibernate Mapping,Nhibernate 3,我得到以下表达式: _senderRepos.Get(s => s.User.Email == fromAddress); 导致 could not resolve property: User.Email of: Module.Fax2Pdf.MailToFax.Models.Sender 类别: public class Sender { public virtual int Id { get; set; } public virtual Site Site { g

我得到以下表达式:

_senderRepos.Get(s => s.User.Email == fromAddress);
导致

could not resolve property: User.Email of: Module.Fax2Pdf.MailToFax.Models.Sender
类别:

public class Sender
{
    public virtual int Id { get; set; }
    public virtual Site Site { get; set; }
    public virtual User User { get; set; }
}
映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="Module.Fax2Pdf.MailToFax.Models.Sender, Module.Fax2Pdf" table="fax_allowed_senders">
    <id name="Id" column="id">
      <generator class="sequence">
        <param name="sequence">fax_allowed_senders_id_seq</param>
      </generator>
    </id>
    <many-to-one column="site_id" name="Site" />
    <many-to-one column="user_id" name="User" />
  </class>
</hibernate-mapping>

传真\u允许\u发件人\u id\u顺序
用户类在其映射文件中确实有一个Email属性。我做错了什么

更新,用户映射

    <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false">
  <class name="Gate.Users.User, Gate.Models" table="users">
    <id name="Id" column="id">
      <generator class="sequence">
        <param name="sequence">users_id_seq</param>
      </generator>
    </id>
    <many-to-one column="site_id" name="Site" />
    <property name="FirstName" column="first_name" type="String" length="30"/>
    <property name="LastName" column="last_name" type="String" length="30"/>
    <property name="CanDelete" column="can_delete" type="boolean" />
    <property name="Email" column="email" type="String" length="255"/>
    <property name="Department" column="department" type="String" length="30"/>
    <property name="Title" column="title" type="String" length="30"/>
    <many-to-one class="Gate.Extensions.Extension, Gate.Models" column="extension_id" name="Extension" />
    <property name="Status" column="status" type="integer" />
    <property name="CreatedAt" column="created_at" />
    <property name="UpdatedAt" column="updated_at" />
    <property name="TimeZone" column="timezone" type="integer" />
    <property name="MiddleNames" column="middle_names" type="string" />
    <property name="NamePrefix" column="name_prefix" type="string" />
    <property name="NameSuffix" column="name_suffix" type="string" />
    <property name="DateOfBirth" column="dob" />
    <property name="RemovedAt" column="removed_at" />
    <property name="ProxyMedia" column="proxy_media" type="boolean" />
  </class>
</hibernate-mapping>

用户标识

如果您先在
IQueryable
上调用
.Expand()
,会怎么样

因此,假设您有一个会话,它可能会如下所示:

var senders = 
    (from sender in session.Query<Sender>().Expand("User")
     where sender.User.Email == fromAddress
     select sender);
var发送者=
(来自session.Query()中的发件人。展开(“用户”)
其中sender.User.Email==fromAddress
选择发送者);

很遗憾,这需要您导入NHibernate扩展方法。

抱歉。我在存储库中的
Get
方法上使用了
QueryOver
,并对其他所有内容使用了
Query
。当我切换到
Query

时,它会起作用。您的问题中没有足够的信息。首先,提供用户类定义和映射可能会有所帮助?有些提供程序与子属性有问题。我使用的是nhibernatePlease随附的一个,请发布您的用户映射文件。嗯,在您的存储库中,您是使用session.Query还是session.Linq来公开Linq提供程序?老实说,这是一个冒险之举,我认为它行不通。您应该使用
Expand
来“带回”更多数据,以便以后访问。然而,
where
子句应该可以很好地使用。