1

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

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

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

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

是否可以通过 Fluent 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();
    }

设备

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

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

        Map(x => x.Name);

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

位置标签

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

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

        Map(x => x.Description);
    }
4

2 回答 2

0

我不确定这是否可以使用标准的 NHibernate。你最好在NHibernate 用户邮件列表上问这个问题,你更有可能在那里得到有用的答案。

于 2009-01-19T23:55:39.377 回答
0

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

Customer
- CustomerID (PK)

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

LocationTag
- LocationTagID (PK)

Device
- DeviceID (PK)
- CustomerLocationTagID (FK)
于 2009-01-22T15:33:38.953 回答