Fluent NHibernate で Automapper を使用して、NHibernate に結合レコードを保存するために多対多の関係を取得しようとすると問題が発生します。
SOにはこれに関する他の投稿がかなりありますが、これまでのところ、問題を解決したものはなく、何か違うことをしているのだろうかと思っています。
マップするアプリのセットアップがあり、DB に結合レコードを手動で作成すると、データが返されるため、読み取りレベルでは正しくマッピングされますが、関係は保持されません。
関連するマッピングは次のとおりです。デフォルトの規則でオートマッパーを使用していましたが、最終的に別の SO 投稿に基づいてこれを試しました。
.Mappings(m => {
m.AutoMappings.Add(AutoMap.AssemblyOf<User>);
m.AutoMappings.Add(AutoMap.AssemblyOf<PostalCode>);
m.AutoMappings.Add(
AutoMap.AssemblyOf<VPA>()
.Override<VPA>(v =>
v.HasManyToMany(x => x.PostalCodes)
.Table("PostalCodesToVPAs")
.ParentKeyColumn("PostalCode_Id")
.ChildKeyColumn("VPA_Id")
.Cascade.SaveUpdate())
.Override<PostalCode>(p =>
p.HasManyToMany(x => x.VPAs)
.Table("PostalCodesToVPAs")
.ParentKeyColumn("VPA_Id")
.ChildKeyColumn("PostalCode_Id")
.Cascade.SaveUpdate().Inverse())
);
})
私の実際のセーブはこんな感じです。郵便番号と vpa の両方を明示的に保存しているのでやり過ぎかもしれませんが、マッピングの逆行に問題がある人についてよく読んだので、両方を試してみたかったのです。うまくいきませんでした。
var postalCode = new PostalCode {Value ="90210", CreatedBy = 0, CreationDate = DateTime.Now, ModifiedBy = 0, ModifiedDate = DateTime.Now};
vpa.PostalCodes.Add(postalCode);
postalCode.VPAs.Add(vpa);
PostalCodeService.Save(postalCode);
VPAService.Save(vpa);
カバーの下で service.save 呼び出しが行います
return (int)Session.Save(obj);
誰もこれを見て、なぜ参加レコードを保存しないのか知っていますか?