Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象中对象的NHibernate refresh()_C#_Wpf_Nhibernate - Fatal编程技术网

C# 对象中对象的NHibernate refresh()

C# 对象中对象的NHibernate refresh(),c#,wpf,nhibernate,C#,Wpf,Nhibernate,我的数据库有一个带有NHibernate的WPF应用程序。现在我有了一个Customer对象,它包含一个Address对象 客户类别 public class Customer:ObjectBase { #region Variables private int _id; private string _name; private Address _address; private string _vat; #endregion #reg

我的数据库有一个带有NHibernate的WPF应用程序。现在我有了一个Customer对象,它包含一个Address对象

客户类别

public class Customer:ObjectBase
{
    #region Variables
    private int _id;
    private string _name;
    private Address _address;
    private string _vat;
    #endregion

    #region Properties
    public virtual int Id
    {
        get { return _id; }
        set 
        { 
            _id = value;
            OnPropertyChanged("Id");
        }
    }

    public virtual string Name
    {
        get { return _name; }
        set 
        { 
            _name = value;
            OnPropertyChanged("Name");
        }
    }

    public virtual Address Address
    {
        get 
        {
            if (_address == null)
                _address = new Address();
            return _address; 
        }
        set 
        { 
            _address = value;
            OnPropertyChanged("Address");
        }
    }

    public virtual string Vat
    {
        get
        {
            return _vat;
        }
        set
        {
            _vat = value;
            OnPropertyChanged("Vat");
        }
    }


    #endregion
}
public class Address:ObjectBase
{
    #region Variables
    private int _id;
    private string _street;
    private string _number;
    private string _city;
    private string _zip;
    private string _country;
    private Customer _customer;
    #endregion

    #region Properties
    /// <summary>
    /// Het unieke ID van een Address zoals deze in de database staat
    /// </summary>
    public virtual int Id
    {
        get
        {
            return _id;
        }
        set
        {
            _id = value;
            OnPropertyChanged("Id");
        }
    }
    /* ... all other properties ...*/
}
...
地址类

public class Customer:ObjectBase
{
    #region Variables
    private int _id;
    private string _name;
    private Address _address;
    private string _vat;
    #endregion

    #region Properties
    public virtual int Id
    {
        get { return _id; }
        set 
        { 
            _id = value;
            OnPropertyChanged("Id");
        }
    }

    public virtual string Name
    {
        get { return _name; }
        set 
        { 
            _name = value;
            OnPropertyChanged("Name");
        }
    }

    public virtual Address Address
    {
        get 
        {
            if (_address == null)
                _address = new Address();
            return _address; 
        }
        set 
        { 
            _address = value;
            OnPropertyChanged("Address");
        }
    }

    public virtual string Vat
    {
        get
        {
            return _vat;
        }
        set
        {
            _vat = value;
            OnPropertyChanged("Vat");
        }
    }


    #endregion
}
public class Address:ObjectBase
{
    #region Variables
    private int _id;
    private string _street;
    private string _number;
    private string _city;
    private string _zip;
    private string _country;
    private Customer _customer;
    #endregion

    #region Properties
    /// <summary>
    /// Het unieke ID van een Address zoals deze in de database staat
    /// </summary>
    public virtual int Id
    {
        get
        {
            return _id;
        }
        set
        {
            _id = value;
            OnPropertyChanged("Id");
        }
    }
    /* ... all other properties ...*/
}
...
但这会刷新除Customer对象中Address对象的值之外的所有属性。是否有方法刷新地址值

我试过了

NHibernateHelper.Session.Refresh(Customer.Address);
但这不起作用。。。 有没有人能解释或解决这个问题


编辑:可能的解决方案

当我按照下面的顺序执行它时,它给出了对象的整个默认值

NHibernateHelper.Session.Refresh(Customer.Address);
NHibernateHelper.Session.Refresh(Customer);

但是我不知道为什么按那个顺序调用刷新函数会使它工作。这对我来说没关系,但你知道为什么必须按这个顺序吗?

有时候,对于NHibernate,我必须重置会话并清除第二个缓存来解决问题,在我选择获取数据后:

public static void ClearCache(this ISessionFactory sessionFactory)
{
    sessionFactory.EvictQueries();
    foreach (var collectionMetadata in sessionFactory.GetAllCollectionMetadata())
             sessionFactory.EvictCollection(collectionMetadata.Key);
    foreach (var classMetadata in sessionFactory.GetAllClassMetadata())
             sessionFactory.EvictEntity(classMetadata.Key);
}

你能为你的关系提供映射文件吗?我也会试试你的功能。但我注意到(为什么我没有先尝试,我不知道…)当我执行时:NHibernateHelper.Session.Refresh(Customer.Address);首先和之后执行:NHibernateHelper.Session.Refresh(Customer);它确实给了我默认值。我可以这样做,但是你知道为什么会这样吗?嗯,不知道,可能是你的地图或者其他什么。这就是我不太喜欢NHibernate的原因,我对请求和其他东西没有足够的控制权。但是,这是一个非常好的框架。