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

时间:2009-01-19 20:51:31

标签: nhibernate fluent-nhibernate nhibernate-mapping

我有三个实体:Customer,Device和LocationTag。

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

设备标有客户LocationTags的子集,因此设备也有一个LocationTag列表(但只有客户的列表)。

如果我从客户列表中删除LocationTag,我希望它也可以从设备中的LocationTag列表中级联删除。目前,我有它工作,但在域对象类中使用手动代码,但在我看来违反了DRY。

是否可以通过Fluent NHibernate映射实现此目的?

Simplified 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();
    }

设备

        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);
    }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以在Customer和LocationTags之间建立关联类。然后让Device使用FK进入关联类而不是直接使用LocationTag。

Customer
- CustomerID (PK)

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

LocationTag
- LocationTagID (PK)

Device
- DeviceID (PK)
- CustomerLocationTagID (FK)