2

在我的域中,Employee和Department有一對多的雙向關係;爲了讓Child Employee同步這個,我有一個'Internal'訪問字段,用於部門中員工的Set(Iesi for NHibernate),否則這些員工只能公開讀取。像這樣:nhibernate的雙向關係模式

系類:

protected internal ISet<Employee> _staff; 
public virtual ReadOnlyCollection<Employee> Staff { 
    get { return new List<Employee>(_staff).AsReadOnly(); } 
} 
public virtual void AddStaff(Employee emp) { 
    emp.Department = this; } 
} 

Employee類:

private Department _department; 
public virtual Department Department { 
    set { 
     // check valid value, etc. 
     value._staff.Add(this); 
    } 
} 

我改變了我的(FNH)映射AsField(Prefix.Underscore)訪問,但因爲我不能使部門虛擬NH不開心。我想我可以讓這個領域成爲一個虛擬財產,並強制餵它,但是這感覺就像我讓域類過度地意識到持久性。

我學習既NH和FNH,我知道我需要在映射關係良好的引物,但我對這個職位的主要問題是,在我的領域類的邏輯:
1)這是一個很好的C#編程模式在一個雙重關係只讀設置?
2)什麼是最好的方法,使其更有用NHibernate?

感謝您的分享!
Berryl

回答

11

我實現了使用這種模式一個一對多的關係:

public class Department 
{ 
    private IList<Employee> _staff = new List<Staff>(); 

    public virtual IEnumerable<Employee> Staff 
    { 
     get { return _staff; } 
    } 

    // Add and Remove have additional checks in them as needed 

    public virtual void AddStaff(Employee staff) 
    { 
     staff.Department = this; 
     _staff.Add(staff); 
    } 

    public virtual void RemoveStaff(Employee staff) 
    { 
     staff.Department = null; 
     _staff.Remove(staff); 
    } 
} 

 

public class Employee 
{ 
    public virtual Department Department { get; internal set; } 
} 

在這種情況下,部是關係的另一方。

+0

嗨傑米 對不起,遲到的信用到期,因爲這運作良好。你認爲有可能翻轉邏輯並讓_staff ISet在內部可見嗎?如果是這樣的話,映射怎麼看呢? 再次感謝您的良好迴應。 – Berryl 2009-05-02 19:26:26