我的数据库有一个使用 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/