2011-06-27 30 views
1

我無法理解問題出現的原因。請讓我知道是否有任何錯誤,我對這個主題很新。非法訪問Fluent和Nhibernate中的加載集合

public class Department 
{ 
    public virtual int Dept_id { get; set; } 
    public virtual String Dept_name { get; set; } 
    public virtual IList<Student> Students { get; set; } 
    //public virtual ICollection<Student> Students { get; set; } 
    public Department() 
    { 
     Students = new List<Student>(); 
    } 
} 
public class Student 
{ 
    public Student() 
    { 

    } 
    //private int _Dept_id; 
    //public virtual Guid StudentId { get; set; } 
    public virtual Guid StudentId { get; set; } 
    /*public virtual int Dept_id 
    { 
     get { return this._Dept_id; } 
     set { this._Dept_id = value; } 
    }*/ 
    public virtual int Dept_id { get; set; } 
    public virtual String Name { get; set; } 
    public virtual int Age { get; set; } 
    public virtual String Address { get; set; } 

    public virtual Department Department { get; set; } 
} 
public class DepartmentMap : ClassMap<Department> 
{ 
    public DepartmentMap() 
    { 
     Table("Department"); 
     Id(x => x.Dept_id).Column("Dept_id"); 
     Map(x => x.Dept_name).Column("Dept_name"); 

     HasMany(x => x.Students).KeyColumn("Student_id").Inverse() 
      .Cascade.All(); 

    } 
} 
public class StudentMap :ClassMap<Student> 
{ 
    public StudentMap() 
    { 
     Table("Student"); 
     Id(x => x.StudentId).Column("Student_id").GeneratedBy.GuidComb(); 

     Map(x => x.Name); 
     Map(x => x.Age); 
     Map(x => x.Address);   

     References(x => x.Department).Column("Dept_id") 
      .Not.Nullable().Not.LazyLoad(); 
    } 
} 

現在,當我試圖將此代碼

[WebMethod(EnableSession = true)] 
    public List<Student> Students() 
    { 
     IList<Student> student = new List<Student>(); 
     ISession session = NHibernateHelper.OpenSession(); 
     student = session.Query<Student>().ToList(); 

     return student.ToList(); 
    } 

它給了錯誤的加載系內的學生名單爲

非法獲取裝填回收

這段代碼中缺少什麼以及爲什麼會發生這種情況?

回答

2

對不起我的壞!還有我做這使我們的工作某類變化..雖然不能肯定的下面提到的想法明顯缺點

改變學生類爲:

public class Student 
{ 
    public Student() 
    { 

    } 

    public virtual Guid StudentId { get; set; } 
    public virtual int Dept_id 
    { 
     get { return Department.Dept_id; } 
     set { this.Dept_id = Department.Dept_id; } 
    } 

    public virtual String Name { get; set; } 
    public virtual int Age { get; set; } 
    public virtual String Address { get; set; } 

    public virtual Department Department { get; set; } 
} 

和學生映射參考作爲

引用(x => x.Department).Column(「Dept_id」)。Cascade.All();

注:應該是沒有單一的部門ID映射

,並改變了DepartmentMap爲:

public DepartmentMap() 
    { 
     Table("Department"); 
     Id(x => x.Dept_id).Column("Dept_id"); 
     Map(x => x.Dept_name).Column("Dept_name"); 


     HasMany(x => x.Students).KeyColumn("Dept_id").AsBag(); 

    } 
相關問題