无法确定具有指定标识符{id}的{实体}是暂时的还是分离的
本文关键字:实体 分离 id 标识符 无法确定 | 更新日期: 2023-09-27 17:58:59
插入UserProject实体时,我收到以下警告。数据插入正确,如果可能的话,我只是想消除所有的nHibernate错误。我正在使用SaveOrUpdate,我希望避免使用特定的Save()或Update(),并将非常重视如何消除此错误。
nHibernate探查器出错:
WARN:
Unable to determine if IdeBoss.DataAccess.Entities.UserProject with assigned identifier IdeBoss.DataAccess.Entities.UserProject is transient or detached; querying the database. Use explicit Save() or Update() in session to prevent this.
我的实体:
public class UserProject
{
public virtual User User { get; set; }
public virtual Project Project { get; set; }
public virtual AccessLevel AccessLevel { get; set; }
public override bool Equals( object obj )
{
if ( ReferenceEquals( null, obj ) )
return false;
if ( ReferenceEquals( this, obj ) )
return true;
if ( obj.GetType() != this.GetType() )
return false;
return Equals( (UserProject)obj );
}
private bool Equals( UserProject other )
{
return Equals( User.Id, other.User.Id ) && Equals( Project.Id, other.Project.Id );
}
public override int GetHashCode()
{
unchecked
{
return ( ( User != null ? User.Id : 0 ) * 397 ) ^ ( Project != null ? Project.Id : 0 );
}
}
}
nHibernate地图:
public class UserProjectMap : ClassMap<UserProject>
{
public UserProjectMap()
{
CompositeId()
.KeyReference( x => x.User, "UserId" )
.KeyReference( x => x.Project, "ProjectId" );
Map( x => x.AccessLevel ).CustomType<Int32>();
}
}
将版本属性添加到模型中。这会解决问题。如果你认为你得到了不止一个版本的对象,请使用merge对对象进行水合并执行更新。