如何可靠地确定实体是暂时的?

时间:2011-08-13 15:02:32

标签: c# .net nhibernate

使用NHibernate,如何可靠地检查给定实体是否是瞬态的(即尚未持久化)?我见过的资源推荐了类似的东西:

public bool IsTransient()
{
    return this.Id == default(Guid);
}

假设我的已经持久化的实体有一个整数ID并且它在某种程度上等于0,那么这种方法不会失败吗?

1 个答案:

答案 0 :(得分:4)

如果0是您上下文中的有效主键,那么是,那将是不可靠的。

基本上,对象id的“unsaved-value”确定它是暂时的还是持久的。默认情况下,它为类型设置为null或default()。您可以选择在进行映射时手动设置。

只要上面代码中的逻辑符合Nhibernate认为的瞬态对象,你就会很好。并且Nhibernate将任何Id属性等于“unsaved-value”的对象都是瞬态的。