繁体   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