2011-01-06 9 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

正直なところ、これは暗闇の中でのショットだったし、それはうまくいくとは思わない。後でアクセスするために、より多くのデータを "戻す"ために 'Expand'を使うことになっています。しかし、 'where'節は、あなたが持っている方法だけでうまくいくはずです。 –