使用NHibernate,如何可靠地检查给定实体是否是瞬态的(即尚未持久化)?我见过的资源推荐了类似的东西:
public bool IsTransient()
{
return this.Id == default(Guid);
}
假设我的已经持久化的实体有一个整数ID并且它在某种程度上等于0,那么这种方法不会失败吗?
答案 0 :(得分:4)
如果0是您上下文中的有效主键,那么是,那将是不可靠的。
基本上,对象id的“unsaved-value”确定它是暂时的还是持久的。默认情况下,它为类型设置为null或default()。您可以选择在进行映射时手动设置。
只要上面代码中的逻辑符合Nhibernate认为的瞬态对象,你就会很好。并且Nhibernate将任何Id属性等于“unsaved-value”的对象都是瞬态的。