Я использую Fluent NHibernate и NHibernate.Core 3 beta 1. У меня есть два класса:
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 [PromotionEntrant] SET PromotionId = null WHERE PromotionId = @p0;@p0 = 1 [Type: Int32 (0)]
Как мне предотвратить это?
Мое единственное предположение состоит в том, что он видит пустой список List в объекте Promotion (создан ASP.NET MVC и, следовательно, не привязан к сеансу NH), принимая это за отсутствие дочерних PromotionEntrants. Чтобы попытаться предотвратить это, я создал следующее переопределение автоматического сопоставления, но это не имеет значения.
public class PromotionMappingOverride : IAutoMappingOverride<Promotion>
{
public void Override(AutoMapping<Promotion> mapping)
{
mapping.HasMany(p => p.PromotionEntrants)
.Cascade.None();
}
}
Любая помощь будет высоко ценится.