2013-01-10 31 views
3

我有實體定義如下:NHibernate的:無法解析繼承id屬性

public class Foo : Entity<Foo.FooId> 
{ 
    public class FooId 
    { 
     public virtual String Bar { get; protected internal set; } 
     public virtual Int32 Buzz { get; protected internal set; } 
    } 

    // ... 
} 

而這裏的基類:

public abstract class Entity<T> : IEquatable<Entity<T>> 
{ 
    public virtual T Id { get; protected internal set; } 

    // ... 
} 

我要地圖「標識」屬性作爲「複合鍵」,所以我添加了以下映射類:

public class FooMap : ClassMapping<Foo> 
{ 
    public FooMap() 
    { 
     ComponentAsId(x => x.Id, m => 
     { 
      m.Property(p => p.Bar); 
      m.Property(p => p.Buzz); 
     }); 
    } 
} 

而這一切都很不錯,但我得到一個錯誤以下查詢嘗試:

session.QueryOver<Foo>() 
     .Where(m => m.Id.Bar == "a" && 
        m.Id.Buzz == 2).List(); 

我得到的錯誤是: NHibernate.QueryException:無法解析屬性:Id的:富

這是很奇怪的,因爲通過去除基類和封裝一切在「Foo」中,它就像一個魅力。 在此先感謝。

+0

你嘗試製作ID二傳手公衆,而不是受保護的內部? –

+0

@Stefan 是的,它並沒有解決我的問題。 – NicolaBaldi

+0

我剛碰到同樣的問題。解決它的任何運氣? – Nathan

回答