我有一个类Order,我使用NHibernate将其保存到数据库中。 Web应用程序中有一个文件夹,其中包含一个继承自Order的对象,出于我们的目的,我们可以将其称为CustomOrder。我使用CustomOrder将一些属性放在Order对象上以用于UI。实际上不必将属性保存到数据库中。
当我将CustomOrder类传递给只接受Order对象的泛型保存方法时,NHibernate会抱怨:
未知的实体类:CustomOrder。
我不需要将自定义字段持久保存到数据库中,但我想保留此继承结构。我是在想错误的做法还是做一些我不该做的事情?
保存代码
public object Save(Order obj, object userID) {
Order o = (Order)obj;
ISession session = NHibernateHelper.GetCurrentSession();
ITransaction tx = session.BeginTransaction();
session.Save(o);
在方法第一行的案例之后,.NET仍然将其标识为CustomerOrder。
答案 0 :(得分:2)
您如何实现它:您需要创建一个新的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
}
}
}
您可以使用Reflection自动执行此操作。 或者看看MemberwiseClone()。
答案 1 :(得分:0)
已经有一段时间了,但我相信您应该能够指定派生类应该作为hibernate映射文件中基类的对象保存。