Packageと多対多の関係を持つShapeというクラスがあります。この双方向の関係の意味は、製品が特定の形状を持っている場合、その形状が関連付けられているパッケージによってパッケージ化できるということです。これは逆にも適用されます。製品がパッケージによってパッケージ化されている場合、これは、製品がこのパッケージに関連付けられた形状である必要があることを意味します。
したがって、Shapeを含むPackagesとPackageを含むShapesを含むドメインモデルがあります。したがって、NHマッピングは、Shape、Package、およびPackageToShapeテーブルになります。
ただし、バージョン管理を適用すると、PackageToShapeテーブルに複数の更新と挿入が発生します。実際には、たとえば、ShapeId = 1、PackageId = 1のような関係が最初に削除されてから、再度挿入されます。実際には、Guidを使用します。しかし、重要なのは、この設定では、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();
}
}
エンティティマップは、ID、名前(一意)、およびバージョンのマッピングを実装します。