加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – NHibernate继承类但不需要持久化

发布时间:2020-12-16 03:18:13 所属栏目:asp.Net 来源:网络整理
导读:我有一个类Order,我使用NHibernate将其保存到数据库中. Web应用程序中有一个文件夹,其中包含一个继承自Order的对象,出于我们的目的,我们可以将其称为CustomOrder.我使用CustomOrder将一些属性放在Order对象上以用于UI.实际上不必将属性保存到数据库中. 当我
我有一个类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.

解决方法

>您无法在.NET中更改实例的类型.没有任何铸造或任何使它成为可能的东西.
>从数据库加载实例时,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
        }
    }
}

您可以使用Reflection自动执行此操作.
或者看看MemberwiseClone().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读