无法确定具有指定标识符{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>();
    }
}

无法确定具有指定标识符{id}的{实体}是暂时的还是分离的

将版本属性添加到模型中。这会解决问题。如果你认为你得到了不止一个版本的对象,请使用merge对对象进行水合并执行更新。