Asp.net NHibernate继承了类,但不需要持久化

Asp.net NHibernate继承了类,但不需要持久化,asp.net,nhibernate,inheritance,persistence,Asp.net,Nhibernate,Inheritance,Persistence,我有一个类Order,我使用NHibernate将它持久化到数据库中。web应用程序中还有一个文件夹,其中包含一个从Order继承的对象,出于我们的目的,我们可以将其称为CustomOrder。出于UI目的,我使用CustomOrder在Order对象上放置一些属性。这些属性实际上不必保存到数据库中 当我将CustomOrder类传递给仅接收Order对象的泛型save方法时,NHibernate抱怨: 未知实体类:CustomOrder 我不需要将自定义字段持久化到数据库中,但我希望保留这种继

我有一个类Order,我使用NHibernate将它持久化到数据库中。web应用程序中还有一个文件夹,其中包含一个从Order继承的对象,出于我们的目的,我们可以将其称为CustomOrder。出于UI目的,我使用CustomOrder在Order对象上放置一些属性。这些属性实际上不必保存到数据库中

当我将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

已经有一段时间了,但是我相信您应该能够指定派生类应该作为基类的对象持久化到hibernate映射文件中

  • 您不能在.NET中更改实例的类型。没有强制类型转换或任何可能的转换
  • 从DB加载实例时,NHibernate希望创建与存储的类型相同的类型。这就是为什么它需要CustomOrder的映射
  • 如何实现:您需要创建一个新的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
            }
        }
    }
    
    您可以使用反射自动执行此操作。
    或者看一看。

    对于必须为子类提供鉴别器,是否有解决办法?+1这正是我要建议的(也是实现这一点的唯一方法)。