2011-08-12 3 views
1

관계는 아마도 잘못된 단어이지만 데이터 테이블은 이전에 사용한 것입니다. SQL 데이터베이스에서 EF4를 가져 왔습니다. 고객, 회사, 부서와 같은 테이블; 일반적으로 선택을 위해 콤보 상자에 들어가는 것들. 정적 목록 (고정식 목록에 있습니다. 응용 프로그램 시작시 채울 필요가 있음)에 바인딩 된 몇 가지 콤보 상자 항목 소스가 있습니다. 그러면 ViewModel에서 선택한 항목을 바인딩하여 특정 선택 항목을 "관련"설정을 쉽게 할 수 있습니다.WPF, EF4 및 관계

내 문제는 몇 군데에서 난 단지 표시 용 데이터 그 릿드의 ID와 연관된 이름이 필요하다는 것입니다. CompanyName이어야하는 CompanyId가있는 수백 개의 행이 있습니다. 나는 여기서 성과를 염려한다. DB FK를 사용하여 조회 중에 이름을 얻을 수는 있지만 정적 목록에 모두 포함되어 있기 때문에 낭비처럼 보입니다. 또한 Lazy 로딩이 데이터 바인딩 중에 또는 초기 쿼리 중에 조회된다는 의미인지 여부를 알지 못합니다.

가장 좋은 해결책은 무엇입니까? 정적 목록을 사용하여 wpf 값 변환기를 만들 수 있습니까? 그것을 가져온 후 데이터에서 foreach를 수행하고 정적 목록에서 값을 찾고 객체에 이름을 저장해야합니까?

답변

1

당신은 당신의 질문에이 논리를 만들 수있다 :.

var viewModels = (from c in objectContext.Customers 
       select new MyGridViewModel { 
         CustomerId = c.CustomerId, 
         CompanyId = c.CompanyId, 
         CompanyName = c.Company.Name 
       }).ToList(); 

이것은 당신의 열 (전용 고객 ID, 회사 ID 및 회사 명을 모두 인출 할 필요가 없습니다 것입니다 반환됩니다 당신은 또한되지 않습니다 게으른로드 고객의 회사 그리고

당신이 단순 바인딩이 그리드로보기 모델 수 있습니다.

myGrid.ItemsSource = viewModels; 
+0

이 솔루션에 대한 유일한 관심은 SQL 조회를 'c.Company.Name'으로 100 번 수행하는 것이 성능 문제 일 수 있다는 것입니다. 응용 프로그램이 이미 가져온 목록을 사용하여이 작업을 수행 할 수 있다면 더 잘 작동 할 것으로 기대합니다. 물론 그것은 제 질문입니다. 당신이 그 문제를 생각하지 않는다면 나는 그 문제와 함께 갈 것입니다. – Tyrsius

+0

그렇지 않습니다. 위의 예에서는 모든 결과를 반환하는 단일 쿼리를 수행합니다. 조인과 중첩 된 쿼리를 사용하여 CustomerId와 동일한 쿼리에서 CompanyName을 가져옵니다. – Jeff

0

방금 ​​삽입 할 수 없습니다가 정적 데이터가 필요합니다 ComboBox를 각 ViewModels의 생성자에 추가 하시겠습니까?

예를 들어 생성자에서 List<Customer> customers을 전달할 수도 있고 엔티티 개체를 사용하지 않으려면 List<CustomerViewModel> customerViewModels을 전달할 수 있습니다. List<CustomerViewModel> customerViewModels에는 콤보 상자를 채우는 데 필요한 열만 있습니다.

의존성 주입 프레임 워크를 사용하는 경우 이것은 특히 쉽지만, 그렇지 않은 경우에도 너무 나쁘지 않아 좋은 연습입니다.

+0

사실 내 질문과 관련이있는 것은 아닙니다. 예, 할 수는 있지만 어떻게하면 저의 임무를 완수 할 수 있습니까? 또한 질문은 콤보 박스에 관한 것이 아니라 다시 읽으십시오. – Tyrsius

+0

저는 ValueConverter 제작에 관한 성명서에 중점을 두었습니다. ValueConverter가 필요하다고 생각하지 않습니다. 필요한 데이터를 ViewModel에 삽입 할 수 있습니다. 즉, JeffN825의 대답은 실제로 내게 꽤 단단한 것처럼 보입니다. 난 WPF 애플 리케이션에 대한 몇 가지 추가 데이터베이스 쿼리에 대해 걱정하지 않을 것이다. SQL Server와 같은 데이터베이스는 막대한 부하를 처리하도록 설계되었습니다. 외부 키 조인을 피하기 위해 다양한 쿼리 결과를 저장하려고하는 조기 최적화의 예가 될 것입니다. 성능이 문제가되면 정적 목록에 일부 데이터를 캐시 할 수 있습니다. – devuxer