2010-02-24 74 views
2

我有一个简单的对象与三个属性。这链接到一个有三列的表,其中两列是主键(一个int是另一个日期时间)。流利Nhibernate,复合键,不能解决属性:错误消息

每当我试着和查询NHibernate的我收到以下错误信息:

无法解析属性:invdate的:Models.Invoice

我错过了一些简单的设置我的映射或者我在做我的查询错误?

对象代码:

public class Invoice 
{ 
    public Invoice() { } 

    #region Properties 

    public virtual int Acct_Link { get; private set; } 
    public virtual DateTime Added { get; private set; } 
    public virtual DateTime InvDate { get; private set; } 

    public static Invoice GetInvoiceByFluent(int accountId, DateTime invoiceDate) 
    { 
     Invoice invoice; 

     using (ISession session = FluentNHibernateHelper.OpenSession()) 
     { 
      invoice = session 
       .CreateCriteria<Invoice>() 
       .SetMaxResults(1) 
       .Add(Expression.Eq("Acct_Link", accountId)) 
       .Add(Expression.Eq("invdate", invoiceDate)) 
       .UniqueResult<Invoice>(); 
     } 

     return invoice; 
    } 

    #region Nhibernate overrides 

    public override bool Equals(object obj) 
    { 
     if (obj == null) 
      return false; 

     Invoice i = obj as Invoice; 

     return this.GetHashCode() == i.GetHashCode(); 
    } 

    public override int GetHashCode() 
    { 
     return this.Acct_Link.GetHashCode()^this.InvDate.GetHashCode(); 
    } 

    #endregion 
} 

映射代码:

public class InvoiceMap: ClassMap<Invoice> 
{ 
    public InvoiceMap() 
    { 
     Table("Invoice"); 

     CompositeId() 
      .KeyProperty(i => i.Acct_Link, "Acct_Link") 
      .KeyProperty(i => i.InvDate, "InvDate"); 

     Map(i => i.Added); 
    } 
} 

如果我拿出参考我的查询到invdate那么这个工作正常。

在此先感谢。

回答

1

该物业被称为InvDate而不是invdate。试试这个:

.Add(Expression.Eq("InvDate", invoiceDate)) 
+0

谢谢。不能相信我错过了这么简单的事情! – lancscoder 2010-02-24 15:36:51

+1

不用担心,使用*魔法字符串时,它总是会发生* :-) – 2010-02-24 15:42:31