簡體   English   中英

存儲庫和工作單元:實體沒有基於外鍵值加載

[英]Repository And Unit Of Work : Entity no loading based on foreign key value

我正在使用存儲庫和工作單元模式,我的課程如下

CourseInstructor實體

[Serializable]
public class CourseInstructor : AuditableEntity
{        
    #region Primitive Properties
    [Required(ErrorMessage = "CourseID is required.")]
    [ForeignKey("Course")]
    public int CourseID { get; set; }

    [Required(ErrorMessage = "StudentID is required.")]
    [ForeignKey("Student")]
    public int PersonID { get; set; }
    #endregion

    #region Navigation Properties

    public Course Course { get; set; }
    public Person Student { get; set; }
    #endregion
}

人實體

[Serializable]
public class Person : AuditableEntity
{
    #region Primitive Properties
    [Required(ErrorMessage = "LastName is required."), StringLength(50, ErrorMessage = "LastName is too long!")]
    public string LastName{ get; set; }


    [Required(ErrorMessage = "FirstName is required."), StringLength(50, ErrorMessage = "FirstName is too long!")]
    public string FirstName{ get; set; }

    [Required(ErrorMessage = "HireDate is required.")]
    public DateTime? HireDate{ get; set; }

    [Required(ErrorMessage = "EnrollmentDate is required.")]
    public DateTime? EnrollmentDate{ get; set; }

    #endregion

    #region Navigation Properties

    public virtual ICollection<CourseInstructor> CourseInstructor{ get; set; }
    //Have other navigation properties to some other entities

    #endregion
}

課程實體

[Serializable]
public class Course : AuditableEntity
{
    #region Primitive Properties
    [Required(ErrorMessage = "Title is required."), StringLength(100, ErrorMessage = "Title is too long!")]
    public string Title
    {get;set;}

    [Required(ErrorMessage = "Credits is required.")]
    public int Credits
    {get;set;}

    [Required(ErrorMessage = "DepartmentID is required.")]
    public int DepartmentID
    {get;set;}
    #endregion

    #region Navigation Properties
    public Department Department { get; set; }


    public virtual ICollection<OnlineCourse> OnlineCourses
    {get;set;}
    public virtual ICollection<OnsiteCourse> OnsiteCourses
    {get;set;}
    public virtual ICollection<StudentGrade> CourseStudentGrades
    {get;set;}
    public virtual ICollection<CourseInstructor> CourseInstructor
    {get;set;}
    #endregion
}

CourseInstructorConfig

public class CourseInstructorConfig : MyProjectConfig<CourseInstructor>
{
    public CourseInstructorConfig()
    {       
        base.HasRequired<Course>((CourseInstructor a) => a.Course)
           .WithMany((Course c) => c.CourseInstructor)
           .HasForeignKey<int>((CourseInstructor d) => d.CourseID);

        base.HasRequired<Person>((CourseInstructor w) => w.Student)
          .WithMany((Person p) => p.CourseInstructor)
          .HasForeignKey<int>((CourseInstructor q) => q.PersonID);
    }
}

CourseConfig

public class CourseConfig : MyProjectConfig<Course>
{
    public CourseConfig()
    {
        base.HasRequired<Department>((Course c) => c.Department)
            .WithMany((Department d) => d.Courses)
            .HasForeignKey<int>((Course cs) => cs.DepartmentID);            
    }
}

CourseInstructorManager

public class CourseInstructorManager
{
    public static List<CourseInstructor> GetCourseInstructor()
    {
        return new CourseInstructorRepository().GetAll().ToList();
    }
}

當我嘗試獲取CourseInstructor的數據時,我將Course的值設置為null,還將Student的值設置為null。 誰能告訴我上面代碼中的問題是什么? 還是我應該做任何更正或補充? 我怎樣才能充實那些實體

List<CourseInstructor> c = CourseInstructorManager.GetCourseInstructor();
Course co = c[0].Course;
Person p = c[0].Student;    

在此處輸入圖片說明

co和p均為空。

如果要通過延遲加載來加載數據,則應使用virtual關鍵字。 因此,您的CourseInstructor應該是

public class CourseInstructor : AuditableEntity
{        

   #region Primitive Properties
   [Required(ErrorMessage = "CourseID is required.")]
   [ForeignKey("Course")]
   public int CourseID { get; set; }

   [Required(ErrorMessage = "StudentID is required.")]
   [ForeignKey("Student")]
   public int PersonID { get; set; }
   #endregion

   #region Navigation Properties

   public virtual Course Course { get; set; }
   public virtual Person Student { get; set; }
   #endregion 
}

關於此的有用的文章: 創建POCO代理的要求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM