流利的nhibernate无法使用引用的notfound忽略

时间:2012-07-11 07:35:42

标签: c# nhibernate fluent-nhibernate

我的映射存在一个奇怪的问题。

我有一个类让我们称之为Order,它可以与自己有关系(将其视为链式事物)。 Order不必在“链”中拥有更新或更旧的版本。

该问题与此Order类中不同的引用可为空的属性有关。该属性,我们称之为Person,具有NotFound.Ignore()设置。

person属性引用了一个不存在的对象。当我加载一个Order时,该引用抛出一个ObjectNotFoundException(No row with the given identifier exists)。但是,由于我有NotFound.ignore,我希望该对象为null。

继承我的对象

public virtual int PersonId { get; set; }
public virtual Person Person { get; set; }
public virtual int OldOrderId { get; set; }
public virtual Order OldOrder { get; set; }
public virtual Order NewOrder { get; set; }

这是我的映射

Map(x => x.PersonId. "person_id").Default("0");
Reference(x => x.Person, "person_id")
            .Not.Update()
            .Not.Insert()
            .NotFound.Ignore()
            .Not.LazyLoad();

Map(x => x.OldOrderId, "oldorder_id").Default("0");
References(x => x.OldOrder , "oldorder_id")
             .Not.Update()
             .Not.Insert();

HasOne(x => x.NewOrder)
             .PropertyRef(x => x.OldOrder)
             .Cascade.SaveUpdate();

当我将.Constrained()设置添加到“HasOne”映射时,Person将返回null(对不对)。但在这种情况下,如果没有NewOrder,则无法创建订单。

1 个答案:

答案 0 :(得分:0)

原因是你映射了foreignkeycolumn两次,并将默认值设置为0,这是NHibernate的合法ID,而不是引用任何内容。

你必须插入NHibernate来改变它,因为如果它是延迟加载的,它将创建一个没有notfound.ignore的代理

0 in foreignkey to null reference