我有三个实体: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);
}
答案 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)