2012-05-20 65 views
0

目前,我有以下(簡化)類/ DB模式:功能NHibernate副本

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作爲刪除潛在客戶及其組件應該仍然是應用程序中的一個選項。

非常感謝。

+0

對於我所瞭解的你正試圖刪除一個沒有級聯刪除**實體**的**展望**,對吧?也許[IStatelessSession](http://stackoverflow.com/questions/6040966/nhibernate-disable-all-delete-orphan)是你在找什麼。 –

+0

我會看看那個謝謝 – karlipoppins

回答

1
void UpgradeToCustomer(Prospect p) 
{ 
    var customer = new Customer 
    { 
     Entity = p.Entity 
    }; 

    p.Entity = null; // prevent cascading 

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

我結束了使用istateless會話,但這看起來像它的工作也。非常感謝 – karlipoppins