[英]Model relations in Entity Framework
我试图基于数据库构建一些模型,我有两个表,一个表用于工作人员,另一个表用于分支。 每个工人都在分支机构工作,因此每个工人只有一个分支机构,而分支机构则有无限的工人。
我的工人模型:
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访问worker分支,但是我想访问在分支中工作的所有worker。 所以我想要像m.Branches.Find(Id).Workers这样的东西。 它有效,但对我来说似乎很奇怪。 因为一个工作程序对象已经在其中所有分支,所以分支对象也有所有工作程序。 我什至不知道我需要这个,因为我可以通过使用LINQ to Entity或raw SQL轻松获取所有在分支中工作的工人。
什么是正确的方法?
导航属性( Worker
类中的Branch
和Branch
中的Workers
)是延迟加载的。 当您从数据库中获取一个Worker时,它不包含分支。 但是,每当需要分支时(即,当您读取w.Branch
),惰性加载机制就会启动并从数据库中获取它。 Branch
Workers
也是如此。
因此,作为一个简单的答案,您正在使用正确的方法。
顺便说一句,这里有很多东西要学习:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.