我的映射存在一个奇怪的问题。
我有一个类让我们称之为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
,则无法创建订单。
答案 0 :(得分:0)
原因是你映射了foreignkeycolumn两次,并将默认值设置为0
,这是NHibernate的合法ID,而不是引用任何内容。
你必须插入NHibernate来改变它,因为如果它是延迟加载的,它将创建一个没有notfound.ignore的代理