FluentNHibernateとNHibernate.Core3ベータ1を使用しています。2つのクラスがあります。
public class Promotion
{
public Promotion()
{
PromotionEntrants = new List<PromotionEntrant>();
}
public virtual int Id { get; set; }
[Required]
public virtual string Name { get; set; }
...
public virtual IList<PromotionEntrant> PromotionEntrants { get; set; }
}
public class PromotionEntrant
{
public virtual int Id { get; set; }
...
public virtual Promotion Promotion { get; set; }
}
私は自動マッピングを使用しています。これにより、期待するスキーマが生成され、ほとんどの場合、期待どおりに機能しているように見えます。
プロモーションを保存/作成するには、次のアクション(ASP.NET MVC 3 RC)があります。
[HttpPost]
public ActionResult SavePromo(Promotion promo)
{
if (ModelState.IsValid)
{
// .SaveOrUpdateCopy(promo) results in the same SQL
NhSession.SaveOrUpdate(promo);
NhSession.Flush();
}
...
}
これにより、予期される「update Promotion ...」クエリが実行されますが、以下も実行されます。
UPDATE [PromotionEntrant] SET PromotionId = null WHERE PromotionId = @p0;@p0 = 1 [Type: Int32 (0)]
これを防ぐにはどうすればよいですか?
私の唯一の推測は、Promotionオブジェクト(ASP.NET MVCによって構築されたためNHセッションにアタッチされていない)に空のリストが表示されていることです。これは、子のPromotionEntrantsが存在しないことを意味します。これを防ぐために、次の自動マッピングオーバーライドを作成しましたが、違いはありません。
public class PromotionMappingOverride : IAutoMappingOverride<Promotion>
{
public void Override(AutoMapping<Promotion> mapping)
{
mapping.HasMany(p => p.PromotionEntrants)
.Cascade.None();
}
}
どんな助けでも大歓迎です。