c# - NHibernate 对象中对象的刷新()

标签 c# wpf nhibernate

我的数据库有一个使用 NHibernate 的 WPF 应用程序。现在我有一个包含地址对象的客户对象。

客户类别

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 ...*/
}
...

在我的应用程序中,我可以编辑我的客户对象。但我还有一个撤消按钮。当我单击该按钮时,它必须显示该客户的原始数据而不进行更改。所以我就想着执行nhibernate session 的刷新功能。

NHibernateHelper.Session.Refresh(Customer);

但这会刷新 Customer 对象中除 Address 对象的值之外的所有属性。有没有办法刷新地址值?

我已经尝试过

NHibernateHelper.Session.Refresh(Customer.Address);

但这不起作用... 有人有解决此问题的解释或解决方法吗?


编辑:可能的解决方案

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

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

但我不知道为什么按该顺序调用刷新函数确实可以正常工作。这对我来说没问题,但知道为什么必须按这个顺序吗?

最佳答案

有时使用 NHibernate,我必须重置 session 并清除第二个缓存才能解决问题,在我选择获取数据后:

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);
}

关于c# - NHibernate 对象中对象的刷新(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294584/

相关文章:

c# - 如何在 C# 中处理和识别 System.ArgumentOutOfRangeException?

c# - 后台线程的 Toast 通知失败

mysql - Hibernate 乐观锁定..它是如何工作的?

c# - 如何将数据库中的数据显示到文本框中,并更新它

c# - 获取所有值的枚举扩展方法

c# - 在文本框中输入非数字时更改默认错误消息需要整数

c# - 如何在异常后清除 NHibernate 缓存

c# - NHIbernate <any> 映射问题

c# - 类成员的自定义属性

c# - WPF 相当于 Winform 的 KeyEventArgs - 使用特定键调用 KeyDown 事件