2012-02-06 79 views
0

這是我第一次嘗試流利的NHibernate和自動映射。不幸的是,我遇到了一個我無法逾越的問題。我收到一個錯誤,說我的某個類的方法無法映射。流利NHibernate:實體'(方法名稱)'沒有映射Id。

public class Person 
{ 
    public IEnumerable<string> GetStuff(){return stuff;} 
} 

異常消息爲:

The entity '<GetStuff>d__0' doesn't have an Id mapped. 

我甚至試圖加入IAutoMappingOverride(使用map.IgnoreProperty)忽略方法。

它真的試圖映射一個方法嗎?這裏發生了什麼?

回答

0

我通過用接口手動標記每個實體來解決這個問題。

public class MyAutomappingConfiguration : DefaultAutomappingConfiguration 
{ 
    public override bool ShouldMap(Type type) 
    { 
     return type.GetInterfaces().Contains(typeof (IEntity)); 
    } 
} 
1

想要Automap的每個實體都必須具有Id屬性,或者從具有Id屬性的類繼承。你的Person類不會。

另外,根據我的經驗,實體中的所有公共方法必須聲明爲虛擬(儘管如果您急於加載所有內容,可能不需要)。

+0

Person實體不是問題,讀取異常消息。我沒有包含完整的人物定義,因爲我想保持簡單。我也嘗試向GetStuff方法添加虛擬,但這沒有幫助。 – Kelly 2012-02-07 16:48:28

+0

我看到了這條消息,對我來說沒有任何意義。不知道爲什麼FNH會將一種方法看作是一個實體,或者說什麼是d__0。它確實抱怨缺少ID,這與您的示例代碼一致,所以認爲它可能值得一試。很高興聽到你解決它 - 這是一個新的方法對我來說。 – 2012-02-08 16:22:03