2011-01-07 4 views
1

어리석은 질문에 대해 사과 합니다만 이것이 WPF 및 Entity Framework에 대한 나의 첫 번째 접근 방식입니다. EntityFramework WPF ObservableCollection에서 master-detail 항목을 업데이트하십시오.

의 내 시나리오를 설명하게

...

나는 나의 EF 컨텍스트에서 모두 마스터 클래스 (고객)와 상세 클래스 (주문)를 가지고있다. LINQ-to-EF 쿼리 (Orders 포함)를 사용하여 마스터 클래스를로드하고 ListBox의 소스로 사용되는 ObservableCollection에 IEnumerable 결과 집합을 넣습니다.

그런 다음 주문을로드하는 DataGrid가 있습니다. 이제 마스터 항목이 ObservableCollection에 있으므로 항목을 추가, 삭제 및 업데이트 할 수 있으며 ListBox에 자동으로 반영됩니다. 문제는 고객에게 주문을 추가해야하는 경우입니다.

컨텍스트에서 모든 항목을 다시로드하지 않고 ObservableCollection의 항목 만 업데이트하는 방법이 있습니까?

은 (간체) 내 코드 사전에

// Loading Customers 
EntitiesContext context = new EntitiesContext(); 
IEnumerable<Customer> customers = from c in context.Customer.Include("Orders") 
              select c; 
ObservableCollection<Customer> oc = new ObservableCollection<Customer>(customers); 
// Binding ListBox 
listCustomers.ItemsSource = oc; 

... 

// Retrieving a Customer (1st for instance...) 
Customer c = (listCustomers.Items[0] as Customer); 
Order o = new Order {Customer = c.ID, Item = "xxx"}; 
context.AddToOrders(o); 

// How can I update the ObservableCollection? 

감사, 문제의

마누엘

답변

0

부분 수동 주문에 연결 (외부 키) 속성을 설정 할 수 있습니다. , 당신은 객체를 생성 이런 식으로

Order o = new Order {Item="xxx"}; 
c.Orders.Add(o); 
context.AddToOrders(o); 

뒤에 (당신이 그것을 원하는 지역 쪽의 컬렉션에 추가 : EF에서 부모 개체에 개체를 추가 할 때, 당신은 정말 그냥 다음과 같은 일을 할 장면 EF는 생성물을 추적하고 키와 연관 키를 제공한다는 것을 기억합니다.) 그리고이를 전체적인 전체 Orders 컬렉션에 추가합니다.

작업을 완료하면 저장 변경 사항을 호출해야하며 FK 값을 만들어 데이터베이스에 저장합니다.

참고 : 더 정교한 객체 계층 구조를 사용하면 두 개의 클래스만으로도 코드에 하드웨어 된 구피 내장 문을 넣고 싶지 않으면 LazyLoading을 조사 할 수 있습니다. 이렇게하면 실제로 필요한 경우에만 필요한 데이터를 검색하고 LINQ 문을 훨씬 간결하게 유지합니다.

+0

답변 해 주셔서 감사합니다. 그런 식으로 고객에게 주문을 추가하기 만하지만 ObservableCollection을 새로 고치지는 않습니다. – Flea777

+0

문제 없습니다. 이것이 답변으로 작동하는 경우 투표를하고 답변으로 표시하십시오. – CodeWarrior

+0

List와 상호 작용하는 대신 ObservableCollection과 상호 작용하는 것이 가장 좋습니다. oc [0] .Orders.Add (o);와 같은 것을 시도해보십시오. 목록이 바인딩되어 있지만 TwoWay 바인딩으로 지정되어 있지 않으므로 목록에 값/개체가 채워지지만 목록에 대한 변경 내용은 원본으로 다시 푸시되지 않습니다. 소스로 독점적으로 작업하면이를 완화하고 모든 상호 작용을 한 곳에서 처리 할 수 ​​있습니다. – CodeWarrior

관련 문제