2009-01-19 108 views
1

我有三個實體:Customer,Device和LocationTag。從多個實體的集合中級聯刪除

客戶有一個LocationTags列表(無非是一個ID和一個說明)。他們也有一個設備列表。

設備帶有客戶位置標籤的子集,因此設備也具有位置標籤列表(但僅限於客戶)。

如果我從客戶列表中刪除了一個LocationTag,我希望它也能級聯刪除設備中的LocationTag列表。目前,我有它的工作,但在域對象類中有手動代碼,但在我看來違反DRY。

是否有可能通過流利的NHibernate映射來實現這一點?

簡體流利NHib映射:

顧客

 public CustomerMap() 
    { 
     WithTable("Customers"); 

     Id(x => x.ID) 
      .WithUnsavedValue(0) 
      .GeneratedBy.Identity(); 

     Map(x => x.Name); 

     HasMany<LocationTag>(t => t.LocationTags).IsInverse(); 

     HasMany<Device>(d => d.Devices).IsInverse(); 
    } 

設備

 public DeviceMap() 
    { 
     WithTable("Devices"); 

     Id(x => x.ID) 
      .WithUnsavedValue(0) 
      .GeneratedBy.Identity(); 

     Map(x => x.Name); 

     HasMany<LocationTag>(x => x.LocationTags).IsInverse(); 
    } 

LocationTag

 public LocationTagMap() 
    { 
     WithTable("LocationTags"); 

     Id(x => x.ID) 
      .WithUnsavedValue(0) 
      .GeneratedBy.Identity(); 

     Map(x => x.Description); 
    } 

回答

0

我不確定這是否甚至可以與標準的NHibernate。你最好在NHibernate users mailing list上問這個問題,你更有可能在那裏得到有用的答案。

+0

對;我的問題應該是,如果這樣的事情甚至可以在NHibernate映射中嘗試,而不是域對象邏輯。感謝詹姆斯的迴應。 – 2009-01-20 00:13:03

0

您可以在Customer和LocationTag之間建立關聯類。然後,設備將FK用於關聯類,而不是直接用於LocationTag。

Customer 
- CustomerID (PK) 

CustomerLocationTag 
- CustomerLocationTagID (PK) 
- CustomerID (FK) 
- LocationTagID (FK) 

LocationTag 
- LocationTagID (PK) 

Device 
- DeviceID (PK) 
- CustomerLocationTagID (FK) 
+0

這將如何在NHibernate或Fluent NHib中映射? – 2009-01-22 20:31:53