我正在尝试基于数据库构建一些模型,我有两个表,一个用于工作,另一个用于分支。每个工人都在一个分支机构工作,所以每个工人只有一个分支机构,分支机构有无限的工人。
我的工人模特:
public class Worker
{
public Worker()
{
Overhours = new List<Overhour>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public decimal WorkerId { get; set; }
public decimal BranchId { get; set; }
.....
public virtual Branch Branch { get; set; }
.....
}
分支机构:
public class Branch
{
public Branch()
{
Workers = new List<Worker>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public decimal BranchId { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Bir şube adı girmelisiniz.")]
public string BranchName { get; set; }
public virtual ICollection<Worker> Workers { get; set; }
}
问题是,我可以使用 m.Workers.Find(Id).Branch 访问工作人员分支,但我想访问在分支机构工作的所有工作人员。所以我想要像 m.Branches.Find(Id).Workers 这样的东西。它有效,但对我来说似乎很奇怪。因为worker对象已经包含了所有分支,所以分支对象也包含所有工作者。我甚至不知道我需要这个,因为我可以通过使用LINQ to Entity或原始SQL轻松获得所有在分支机构工作的工作人员。
这样做的正确方法是什么?
答案 0 :(得分:0)
导航属性(Branch
类中的Worker
和Workers
中的Branch
)是延迟加载的。从数据库中获取Worker时,它不包含其中的分支。但是,无论何时需要分支(即,当您阅读w.Branch
时),延迟加载机制都会启动并从数据库中获取它。
对于Workers
中的Branch
也是如此。
所以,作为一个简单的答案,你正在以正确的方式做到这一点。
顺便说一下,这里有很多东西需要学习: