[英]NHibernate SaveOrUpdate, error: No persister for
我有一個基類A的NHibernate映射
class A
{
}
class B : A
{
}
public save(A a)
{
session.SaveOrUpdate(a);
}
錯誤:B沒有持久性
正如您所看到的,B已經使用正確的基類型A傳遞,但我仍然得到關於類型B的持久性的錯誤
NHibernate是否支持這樣的繼承...我該怎么辦?
更新:重寫的答案
顯然,雖然我沒有找到確切的來源,但實際的課程是重要的。 如果您認為NHibernate使用反射來查找底層類型,這是有道理的。 此外,當加載映射時,它會修飾您的類型,因此它們基本上會變成不同的類型(您可以看到在調試時將鼠標懸停在它們上面)。
這個原則基本上可以防止繼承downcast-mapping,因為你的派生類型沒有被映射,它沒有被裝飾,因此不知道。 如果您需要使用繼承,您有幾個選擇:
所有這些方法都相當麻煩。 如果您的設計允許它而不是繼承,則使用部分類或擴展方法。 后者是我在我自己的項目中發現的,顯然我之前遇到過這個問題並使其成為使用擴展方法的習慣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.