Joh*_*ohn 5 c# nhibernate fluent-nhibernate
我有一个基类A的NHibernate映射
class A
{
}
class B : A
{
}
public save(A a)
{
session.SaveOrUpdate(a);
}
Run Code Online (Sandbox Code Playgroud)
错误:B没有持久性
正如您所看到的,B已经使用正确的基类型A传递,但我仍然得到关于类型B的持久性的错误
NHibernate是否支持这样的继承...我该怎么办?
更新:重写的答案
显然,虽然我没有找到确切的来源,但实际的课程是重要的.如果您认为NHibernate使用反射来查找底层类型,这是有道理的.此外,当加载映射时,它会修饰您的类型,因此基本上它们会变成不同的类型(您可以看到在调试时将鼠标悬停在它们上面).
这个原则基本上可以防止继承downcast-mapping,因为你的派生类型没有被映射,它没有被装饰,因此不知道.如果您需要使用继承,您有几个选择:
所有这些方法都相当麻烦.如果您的设计允许它而不是继承,则使用部分类或扩展方法.后者是我在自己的项目中发现的,显然我之前遇到过这个并且使它成为使用扩展方法的习惯.
归档时间: |
|
查看次数: |
2609 次 |
最近记录: |