У меня есть класс Shape, который имеет отношение многие ко многим с Package.Смысл этого двунаправленного отношения состоит в том, что если Продукт имеет определенную Форму, он может быть Упакован Пакетами, с которыми связана Форма.Это также относится к обратному, если продукт упакован в пакет, это означает, что продукт должен иметь форму, связанную с этим пакетом.
Поэтому у меня есть модель домена с Shape, содержащей пакеты, и Package, содержащим Shapes.Соответственно, сопоставление NH приводит к появлению таблицы Shape, Package и PackageToShape.
Однако, когда я применяю управление версиями, это приводит к нескольким обновлениям и вставкам в таблицу PackageToShape.На самом деле, происходит следующее: например, ShapeId = 1, PackageId = 1 сначала удаляется, а затем вставляется снова!На самом деле я использую Guids.Но дело в том, что с этой настройкой NH создает несколько операторов удаления и вставки в таблицу «многие ко многим», сначала удаляя строку, а затем снова добавляя точно такую же строку !!
Есть ли способ предотвратить это???
Сопоставления (с использованием Fluent 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();
}
}
Карта сущностей реализует сопоставления идентификаторов, имен (уникальных) и версий.