2009-01-19 70 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