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