我有一个类 Order,我使用 NHibernate 将它保存到数据库中。在 Web 应用程序的更下方有一个文件夹,其中包含一个从 Order 继承的对象,出于我们的目的,我们可以将其称为 CustomOrder。我使用 CustomOrder 将一些属性放置到 Order 对象上以用于 UI 目的。这些属性实际上不必保存到数据库中。
当我将 CustomOrder 类传递给只接收 Order 对象的通用 save 方法时,NHibernate 会提示:
未知实体类:CustomOrder。
我不需要将自定义字段持久化到数据库,但我想保留这种继承结构。我是在用错误的方式思考还是在做我不应该做的事情?
保存代码
public object Save(Order obj, object userID) {
Order o = (Order)obj;
ISession session = NHibernateHelper.GetCurrentSession();
ITransaction tx = session.BeginTransaction();
session.Save(o);
在方法的第一行中的 case 之后,.NET 仍将其标识为 CustomerOrder。
最佳答案
您如何实现它:您需要创建一个新的 Order 实例。
// get the CustomOrder from somewhere
CustomOrder customOrder;
// create an instance of Order and store it.
session.Save(customOrder.GetOrder());
class CustomOrder
{
// just one of many ways: a method on the CustomOrder to create
// instance of Order
public GetOrder()
{
return new Order()
{
property1 = this.property1,
property2 = this.property2,
property3 = this.property3
}
}
}
您可以使用反射来自动执行此操作。
或者看看MemberwiseClone() .
关于asp.net - NHibernate 继承类但无需持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769107/