簡體   English   中英

NHibernate SaveOrUpdate,錯誤:沒有持久性

[英]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,因為你的派生類型沒有被映射,它沒有被裝飾,因此不知道。 如果您需要使用繼承,您有幾個選擇:

  1. 為派生類創建映射
  2. 為您的類添加一個轉換器從另一個類型復制(強制轉換是不夠的,它不會更改底層對象)
  3. 使用ICloneable

所有這些方法都相當麻煩。 如果您的設計允許它而不是繼承,則使用部分類或擴展方法。 后者是我在我自己的項目中發現的,顯然我之前遇到過這個問題並使其成為使用擴展方法的習慣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM