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