在我们公司中,我们正在为客户构建应用程序(与往常一样)。我们使用实体框架.net Core 2.2,并且正在创建一个webapi,该api通过javascript框架作为前端使用。我主要关心的是我们在与客户的最后一次反馈之前和之后如何加载实体。 在上下文的最后反馈之前加载部门的主要实现方式是:
var department= await _dbcontext.Departments.Where(x=>x.Department, == Id)
.Include(x=>x.Employees)
.Include(x=>x.Salaries).ToListAsync();
相当直率和扎实,尊重我们所知道的实体框架。
然后,客户端通知我们雇员和薪水将存在于我们不知道的不同数据库中,并且应该通过http客户端获取依赖项,然后以某种方式获取将其作为导航属性加载到dbcontext的当前模型中。 他们解释说,我们必须将当前的api分成彼此独立的三个api。 外键将存在,例如employeeId-depId和employeeId-salaryId,但是导航属性将来自其他位置。
假设我这样通过httpClient呼叫员工列表,
private List<Employee> CallHttpClient(int depId)
{
List<Employee> Results = new List<Employee>();
using (var client = new HttpClient())
{
client.BaseAddress = new Uri($"somepath/api/Employees/GetEmployeesByDept/{Id}");
var response =
client.GetAsync();
response.Wait();
var result = response.Result;
if (result.IsSuccessStatusCode)
{
var readTask = result.Content.ReadAsAsync<List<Employee>>();
readTask.Wait();
Results = readTask.Result;
}
}
return Results;
}
并这样称呼它:
var department= await _dbcontext.Departments.Where(x=>x.Department, == Id).FirstOrDefault();
List<Employees> employees = CallHttpClient(department.Id);
我如何将员工作为部门的导航资产加载并使用它?如果需要,我们甚至可以像这样正确地使用linq连接吗?