![](/img/trans.png)
[英]How to get foreign key linked values while using generic repository and unit of work patterns with Entity Framework Core
[英]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.