2010-08-05 4 views
2

직원 및 우선 순위 속성이있는 ToDo 클래스가 있습니다. 사용자가 할일 항목을 업데이트하는 경우, TASKNAME을 변경하고 어쩌면 내가 우선 순위 속성을 업데이트 어떻게 새로운 우선 순위 설정 - 나는 방법 저장 다음 한 내 윈폼 코드에서엔티티 프레임 워크로 중첩 된 속성을 업데이트하는 방법

public class ToDo : BaseEntity 
{ 
    public DateTime? DueDate { get; set; } 
    public String Notes { get; set; } 
    public virtual Priority Priority { get; set; } 
    public virtual Staff Staff { get; set; } 
    public String TaskName { get; set; } 
} 

을 :

private void Save()  
{  
    var todo = new ToDo  
    {  
     ID = ToDoID,  
     Staff = ddlStaff.SelectedValue,  
     Priority = ddlPriority.SelectedValue,  
     TaskName = txtTaskName.Text.Trim(), 
     Notes = txtNotes.Text.Trim(), 
     DueDate = String.IsNullOrEmpty(txtDueDate.Text) ? DateTime.Now : DateTime.Parse(txtDueDate.Text.ToString()) 
}; 

_todoController.SaveOrUpdate(todo); 

은 }

UI에는 직원 및 우선 순위에 대한 드롭 다운/콤보 목록이 있지만 ddlPriority.SelectedValue는 Priority 개체가 아닙니다. I 은 SelectedValue를 전달하는 데이터베이스를 호출하여 Priority 개체를 반환 한 다음 ToDo 개체로 전달할 수 있지만 ToDo 항목과 우선 순위 간의 관계를 만들고 관리하는 것은 미친 것처럼 보입니다.

답변

0

PriorityId이라는 추가 속성을 설정하여 가져올 수도 있습니다. 웹 응용 프로그램은 상태가 없으므로 매우 일반적인 시나리오입니다.

편집 : 또한 같은 것을 할 수 있습니다

var selectedStaff = new Staff(); 
selectedStaff.Id = 2; 
context.Staff.Attach(selectedStaff); // The important part. 

var todo = new ToDo  
{  
    ID = ToDoID,  
    Staff = selectedStaff, 
    Priority = ddlPriority.SelectedValue,  
    TaskName = txtTaskName.Text.Trim(), 
    Notes = txtNotes.Text.Trim(), 
    .... 
} 

context.SaveChanges(); 

context.Staff.Attach(someStaffObject) 호출은 기본적으로 참조 할 수 있도록 상황에 직원 개체를 추가합니다. Attach()에 전화하기 전에 키를 속성으로 설정해야합니다.

+0

일반적으로 나는 fk (PriorityID) 접근법을 사용하지만, 모든 예제는 ID보다는 엔티티를 참조하는 것처럼 보입니다. 엔티티에 대해 질의 할 수 있다는 것은 좋은 점입니다. 그러나 ToDo를 업데이트하기위한 데이터베이스로의 왕복은 저에 관한 것입니다. 나는 또 다른 여행이 될 수 있도록 직원 관계를 가지고 있는데, 이것은 단지 2 명의 관계가있는 '단순한'대상입니다. 더 복잡한 사람들은 어떻습니까? –

+0

@ Simon - 대부분의 예제는 예제이기 때문에 참조 방법이 있습니다. 실제 시나리오에는 적합하지 않습니다. 더 복잡한 "객체는 위에서 설명한 PK/FK 접근 방식을 사용합니다. 위의 편집 내용을 다른 방법으로 봅니다. – TheCloudlessSky

관련 문제