我有一個叫Package的類與Package有着多對多的關係。這種雙向關係的含義是,如果某個產品具有某種形狀,則可以通過與該形狀關聯的包進行包裝。這也適用於相反的情況,如果產品是通過包裝進行包裝的,這意味着產品應該是與此包裝相關的形狀。NHIbernate雙向多對多映射插入更新問題
因此,我有一個包含Shape和Package的Shape模型的域模型。 NH映射相應地產生一個Shape,Package和PackageToShape表。
但是,當我應用版本控制時,會導致多個更新並在PackageToShape表中插入。實際上,發生的是一個關係,例如: ShapeId = 1,PackageId = 1首先被刪除,然後再次插入!實際上我使用Guids。但重點是,通過這個設置,NH在多對多表上創建多個刪除和插入語句,首先刪除一行,然後再次添加完全相同的行!
有沒有辦法來防止這種情況發生?
映射(使用流利NH)
public sealed class ShapeMap: EntityMap<Shape, Guid, ShapeDto>
{
public ShapeMap()
{
HasManyToMany(s => s.Packages)
// Fetch.Join will raise laizy collection load error
.Fetch.Select()
.AsSet()
.Cascade.All();
HasManyToMany(s => s.UnitGroups)
// Fetch.Join will raise laizy collection load error
.Fetch.Select()
.AsSet()
.Cascade.All();
HasManyToMany(s => s.Routes)
// Fetch.Join will raise laizy collection load error
.Fetch.Select()
.AsSet()
.Cascade.All();
}
的映射封裝:
public class PackageMap : EntityMap<Package, Guid, PackageDto>
{
public PackageMap()
{
Map(p => p.Abbreviation).Not.Nullable().Length(30).Unique();
HasManyToMany(p => p.Shapes)
// Fetch.Join will raise laizy collection load error
.Fetch.Select()
.AsSet()
.Inverse()
.Cascade.All();
}
}
實體映射實現了ID,名稱(唯一的)和版本映射。