2011-01-06 3 views
4

나는 다음 식을 얻을 :자 NHibernate 및 LINQ 문제

_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> 
,

그리고 User 클래스에는 매핑 파일에 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> 
+0

질문에 충분한 정보가 없습니다. 어쩌면 사용자 클래스 정의와 매핑을 제공하면 도움이 될 것입니다. –

+0

어떤 Linq 공급자 구현을 사용합니까? 일부 공급자는 하위 속성에 문제가 있습니다. –

+0

nhibernate에 포함 된 것을 사용합니다 – jgauffin

답변

0

사과. 나는 리포지토리의 Get 메서드에서 QueryOver을 사용하고 다른 모든 것은 Query을 사용했습니다. Query으로 전환하면 작동합니다.

1

당신이 당신의 IQueryable 처음에 .Expand()라고하면?

그래서, 당신은 세션을 가지고 가정은 다음과 같습니다

var senders = 
    (from sender in session.Query<Sender>().Expand("User") 
    where sender.User.Email == fromAddress 
    select sender); 

를 불행히도 NHibernate에 확장 방법을 가져올 것을 요구하는.

+0

솔직히이 사진은 어둠 속에서 찍은 사진이었고 효과가 없을 것이라고 생각합니다. 나중에 액세스하기 위해 더 많은 데이터를 "다시 가져 오려면"확장을 사용해야합니다. 그러나 where 절은 여러분이 가지고있는 방식대로 잘 작동해야합니다. –