1

我的映射有一个奇怪的问题。

我有一个类可以调用它Order,它可以与自身有关系(将其视为一种链式的东西)。Order在“链”中不必有新的或旧的。

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

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

这是我的对象:

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.

4

1 回答 1

0

原因是您映射了两次外键列并将默认值设置0为 NHibernate 的合法 id 并且没有引用任何内容。

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

外键中的 0 到空引用

于 2012-07-12T09:36:55.350 回答