子对象的流畅休眠副本
本文关键字:休眠 副本 对象 | 更新日期: 2023-09-27 18:34:57
我目前有以下(简化的(类/数据库模式:
Entity Prospect Customer
+- Id +- Id +- Id
+- Address +- Entity +- Entity
+- Name +- ... +- ...
+- ...
ENTITY PROSPECT CUSTOMER
====== ========== ========
ID - INT PK ID - INT PK ID - INT PK
ADDRESS - VARCHAR ENTITY_ID - INT FK ENTITY_ID - INT FK
NAME - VARCHAR ...
...
以及以畅映射:
PROSPECT_MAP:
Table("PROSPECT");
Id(x => x.Id).GeneratedBy.Increment();
References(x => x.Entity).Cascade.All().Fetch.Join().Column("ENTITY_ID");
...
CUSTOMER_MAP:
Table("CUSTOMER");
Id(x => x.Id).GeneratedBy.Increment();
References(x => x.Entity).Cascade.All().Fetch.Join().Column("ENTITY_ID");
...
现在还有一堆东西附加到实体(使用 entity_id 作为 FK(。在我的应用程序中,潜在客户可以成为客户。
因此,我想创建一个新客户,将其链接到前潜在客户使用entity_id(以便与该实体相关的所有信息现在都属于客户(,然后从数据库中删除潜在客户(因此基本上只是从潜在客户表中删除条目,而不是级联到现在由新创建的客户链接的子组件(
NHibernate可以做到这一点吗?请注意,我需要在我的前景地图中使用 cascade.all,因为删除潜在客户及其组件应该仍然是应用程序中的一个选项。
多谢。
void UpgradeToCustomer(Prospect p)
{
var customer = new Customer
{
Entity = p.Entity
};
p.Entity = null; // prevent cascading
session.Delete(p);
session.Save(customer);
}