Nhibernate 从多个实体中的集合级联删除

Nhibernate 从多个实体中的集合级联删除,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我有三个实体:客户、设备和LocationTag 客户有一个LocationTag列表(只不过是一个ID和一个描述)。他们也有一个设备列表 设备用客户的LocationTags的子集进行标记,因此设备也有LocationTags的列表(但仅限于客户的) 如果我从客户列表中删除LocationTag,我希望它也能从设备中的LocationTag列表中级联删除。目前,我使用的是域对象类中的手动代码,但我认为这违反了DRY 是否可以通过流畅的NHibernate映射实现这一点? 简化的Fluent N

我有三个实体:客户、设备和LocationTag

客户有一个LocationTag列表(只不过是一个ID和一个描述)。他们也有一个设备列表

设备用客户的LocationTags的子集进行标记,因此设备也有LocationTags的列表(但仅限于客户的)

如果我从客户列表中删除LocationTag,我希望它也能从设备中的LocationTag列表中级联删除。目前,我使用的是域对象类中的手动代码,但我认为这违反了DRY

是否可以通过流畅的NHibernate映射实现这一点?

简化的Fluent 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();
    }

我不确定这在标准NHibernate中是否可行。您最好在上问这个问题,您更可能在那里得到一个有用的答案。

您可以在Customer和LocationTags之间建立一个关联类。然后让设备将FK用于关联类,而不是直接用于LocationTag

Customer
- CustomerID (PK)

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

LocationTag
- LocationTagID (PK)

Device
- DeviceID (PK)
- CustomerLocationTagID (FK)

正当我的问题应该是,是否应该在NHibernate映射中尝试类似的操作,而不是域对象逻辑。谢谢你的回复,詹姆斯。这将如何映射到NHibernate或Fluent NHib?
        public LocationTagMap()
    {
        WithTable("LocationTags");

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

        Map(x => x.Description);
    }
Customer
- CustomerID (PK)

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

LocationTag
- LocationTagID (PK)

Device
- DeviceID (PK)
- CustomerLocationTagID (FK)