저는 breeze.js에 새롭기 때문에 두 엔티티를 결합 할 수 있어야합니다.Breezejs/knockout - 엔티티를 어떻게 결합합니까?
지금은 하나의 쿼리에서 필요한 모든 정보를 얻을 수 없습니다. 내 솔루션은 별도로 두 엔티티를 얻은 다음 코드로 결합하는 것입니다. 여기
는 두 쿼리입니다 var query = breeze.EntityQuery
.from("EmployeeLaborTasks")
.where("task_ID", "==", taskID)
.orderBy("employee_ID")
.expand(["Employee", "LaborCategory"]);
var query = breeze.EntityQuery
.from("ForecastedHours")
.where("task_ID", "==", taskID)
.expand("Employee");
EmployeeLaborTasks가되어 TASKID, 직원 ID 및 LaborCategoryID에 대한 외래 키와 조인 테이블. 이를 통해 taskID를 기반으로 Employees와 LaborCategory를로드 할 수 있습니다.
그러나 나는 아직도 각 직원의 예측 된 Hours가 필요합니다. . .
ForecastedHours는 월별로 입력되므로 직원이 1 년 (최대 12 시간) 동안 많은 항목을 가질 수 있습니다. 이 때문에 첫 번째 쿼리에 ForecastedHours를 추가하는 데 사용할 수있는 적용 가능한 탐색 속성이 없습니다. 이 테이블에는 taskID 및 employeeID에 대한 외래 키가 들어 있습니다. 따라서 두 번째 것이 필요합니다.
employee.ID에 두 개의 결과 엔터티를 결합하고 싶습니다. 궁극적으로, 나는 12 개월 동안 직원 이름, 노동 범주 및 예측 시간을 표시하는 그리드 (녹아웃/듀란 달을 통해)에서이 정보를 사용합니다.
이것이 가능합니까? 이 엔티티에 가입하면 Breeze.js 추적이 망가져 정보를 업데이트 할 수 있습니까?
나는 또한 knockout의 ko.computed를 통해 그들을 결합하는 것이 더 좋을지 궁금하지만이 작업을 수행하는 방법을 잘 모르겠습니다.
도움을 주시면 감사하겠습니다. 아래 Dominictus, 나는 문제의 테이블에 대한 데이터 모델을 게시하고 응답에서
:
public class Employee : Person
{
[Key]
public int ID { get; set; }
public string CompanyEmployeeID { get; set; }
public decimal Salary { get; set; }
public decimal UtilizationTarget { get; set; }
public virtual Office OfficeLocation { get; set; }
public virtual Department Department { get; set; }
public virtual JobGrade JobGrade { get; set; }
}
public class EmployeeLaborTasks
{
[Key]
public int ID { get; set; }
public virtual Employee Employee { get; set; }
[ForeignKey("Employee")]
public int Employee_ID { get; set; }
public virtual Task Task { get; set; }
[ForeignKey("Task")]
public int Task_ID { get; set; }
public virtual LaborCategory LaborCategory { get; set; }
[ForeignKey("LaborCategory")]
public int LaborCategory_ID { get; set; }
}
public class ForecastedHours
{
[Key]
public int ID { get; set; }
[Required]
public double Hours { get; set; }
[Required]
public DateTime Date { get; set; }
[Timestamp]
public Byte[] LastModified { get; set; }
public virtual User ModifiedBy { get; set; }
public virtual Employee Employee { get; set; }
public virtual Task Task { get; set; }
[ForeignKey("Task")]
public int Task_ID { get; set; }
[ForeignKey("Employee")]
public int Employee_ID { get; set; }
}
public class Task
{
[Key]
public int ID { get; set; }
[Required]
public string Name { get; set; }
public int Number { get; set; }
[ForeignKey("Contract")]
public int ContractID { get; set; }
public virtual Contract Contract { get; set; }
[Timestamp]
public Byte[] LastModified { get; set; }
public virtual User ModifiedBy { get; set; }
}
public class LaborCategory
{
[Key]
public int ID { get; set; }
[Required]
public string Name { get; set; }
public decimal Rate { get; set; }
public virtual Contract Contract { get; set; }
[Timestamp]
public Byte[] LastModified { get; set; }
public virtual User ModifiedBy { get; set; }
}
안녕하십니까, 귀하의 회신과 많은 도움에 감사드립니다. 아직 예상 시간을 얻지 못하고 있습니다 (다른 모든 것은 BreezeController의 개조를 통해 이루어집니다). 불행히도 필자는 'Public virtual ForecastedHours {get; set;}'를 내 직원에게주지 않았습니다.추가를 시도했지만 형식이 제대로 작동하지 않는 것 같아서 'public virtual ForecastedHours Hours {get; set;}'와 같은 변형을 시도했습니다. 위 테이블에 대한 데이터 모델을 게시합니다. 다른 아이디어? –
Jimbo
ForecastHours의 Task에 외래 키를 놓으십시오. 그러면 Employee가 ForecastHours를 가질 수 있어야합니다. 모델에 종이를 그려야하고 의존성을보아야한다. 내가 보는 방식, 뭔가 냄새를 맡고 재 설계해야한다.) ForecastHour가 Task에 직접 연결될 필요는 없다고 생각한다. 그렇지 않으면 EmployeeLaborTasks를 쿼리하여 연결할 수있다. (이상한 것은 아님) – Dominictus
ForecastedHours에서 Task의 외래 키를 삭제했지만 여전히 문제가 있습니다. ForecastedHours를 참조하는 Employee 자체에 외래 키가 필요한 것입니다. 그러나 그것은 한 직원에게 많은 시간 항목이 있기 때문에 거꾸로 보입니다. 또한 테이블의 종속성을 수정하려고 시도했지만 여전히 운이 좋지 않습니다. – Jimbo