【问题标题】:Fluent nhibernate copy of a child object子对象的流畅 nhibernate 副本
【发布时间】:2012-05-25 15:13:22
【问题描述】:

我目前有以下(简化的)类/数据库架构:

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 可以做到这一点吗?请注意,我需要 ProspectMap 中的 cascade.all,因为删除潜在客户及其组件应该仍然是应用程序中的一个选项。

非常感谢。

【问题讨论】:

  • 据我所知,您正在尝试删除 Prospect 而不级联删除 Entity,对吗?也许IStatelessSession 就是你要找的。​​span>

标签: c# nhibernate fluent-nhibernate


【解决方案1】:
void UpgradeToCustomer(Prospect p)
{
    var customer = new Customer
    {
        Entity = p.Entity
    };

    p.Entity = null; // prevent cascading

    session.Delete(p);
    session.Save(customer);
}

【讨论】:

  • 我最终使用了无状态会话,但这看起来也可以正常工作。非常感谢
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多