データベース用にNHibernateを使用したWPFアプリケーションがあります。これで、Address オブジェクトを保持する Customer オブジェクトができました。
顧客クラス
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 オブジェクトを編集できます。しかし、元に戻すボタンもあります。そのボタンをクリックすると、その顧客の元のデータを変更なしで表示する必要があります。そこで、nhibernate セッションのリフレッシュ機能を実行しようと考えていました。
NHibernateHelper.Session.Refresh(Customer);
ただし、これにより、Customer オブジェクトの Address オブジェクトの値を除くすべてのプロパティが更新されます。アドレス値を更新する方法はありますか?
私はもう試した
NHibernateHelper.Session.Refresh(Customer.Address);
しかし、これは機能しません...この問題を解決するための説明や回避策はありますか?
編集:可能な解決策
次の順序で実行すると、オブジェクトのデフォルト値全体が得られます
NHibernateHelper.Session.Refresh(Customer.Address);
NHibernateHelper.Session.Refresh(Customer);
しかし、リフレッシュ関数をその順序で呼び出すと機能する理由がわかりません。それは私にとっては問題ありませんが、なぜその順序でなければならないのか考えていますか?