2010-12-05 7 views
0

Comment convertir cette NHibernate HQL (travaux) ...Problème conversion HQL LINQ to NHibernate

static IList<Phone> PhoneList() 
{ 
    ISession session = OpenSession(); 

    IQuery query = session.CreateQuery("from Phone p where p.Kontact.ContactName = :_contact_name"); 
    query.SetParameter("_contact_name", "lennon"); 

    IList<Phone> contacts = query.List<Phone>(); 

    return contacts;   
} 

... à LINQ à NHibernate (ne fonctionne pas):

static IList<Phone> PhoneListUsingLinq() 
{ 
    string contactName = "lennon"; 

    ISession session = OpenSession(); 

    var contacts = from Phone p in session.Query<Phone>() 
     where p.Kontact.ContactName == contactName 
     select p; 

    return contacts.ToList(); 

} 

les objets:

public class Contact 
{ 
    public virtual int ContactId { get; set; } 
    public virtual string ContactName { get; set; } 

    public virtual IList<Phone> Phones { get; set; } 


} 

public class Phone 
{ 
    public virtual Contact Kontact { get; set; } 
    public virtual int PhoneId { set; get; } 
    public virtual string PhoneNumber { get; set; } 
} 

Voici le fichier de mappage de .hbm.xml que deux objets:

<?xml version="1.0" encoding="utf-8" ?> 

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="TestTwoTable" namespace="TestTwoTable"> 

    <class name="Contact" table="contact"> 
    <id name="ContactId" column="contact_id"> 
     <generator class="sequence"> 
     <param name="sequence">contact_contact_id_seq</param> 
     </generator> 
    </id> 

    <property name="ContactName" column="contact_name"/> 

    <bag name="Phones" inverse="true"> 
    <key column="contact_id"/> 
    <one-to-many class="Phone"/> 
    </bag> 

    </class> 

    <class name="Phone" table="phone"> 
    <id name="PhoneId" column="phone_id"> 
     <generator class="sequence"> 
     <param name="sequence">phone_phone_id_seq</param> 
     </generator> 
    </id> 

    <property name="PhoneNumber" column="phone_number"/> 

    <many-to-one name="Kontact" column="contact_id" class="Contact" not-null="true"/> 

    </class> 

</hibernate-mapping> 

Quel est le problème avec cela?

var contacts = from Phone p in session.Query<Phone>() 
       where p.Kontact.ContactName == contactName 
       select p; 

Note: J'utilise NHibernate 3

+1

Change "de téléphone p" à "de p" – Phill

+0

aussi, ce qui est un " Kontact "? – Phill

+0

Kontact est Contact. Btw, mettez votre commentaire: ** Changer "de Phone p" en "de p" ** pour répondre, donc je peux l'accepter comme réponse. Je ne savais pas que c'était aussi simple. Merci beaucoup! –

Répondre

5

Change "de téléphone p" à "de p"