2011-12-27 1 views
0

Silverlight에서 RIA 서비스를 사용하려고합니다. CRUD 작업은 매우 쉽습니다. 그러나 "존재하지 않는"경우가 붙어 있습니다.Silverlight RIA 서비스에서 SQL을 "존재하지 않음"으로 구현

내가 두 엔티티 사람을 (carID을 personID) 및 차량 (, PERSONNAME을 personID)이있다. 어떤 사람에게는 차가 있지만 단 하나의 차가 있습니다.


<sdk:DataGrid Name="PersonGrid" AutoGenerateColumns="False"> 
        <sdk:DataGrid.Columns > 
         <sdk:DataGridTextColumn Binding="{Binding personID}" /> 
         <sdk:DataGridTextColumn Binding="{Binding personName}" /> 
         <sdk:DataGridTextColumn Binding="{Binding CarNavigation.carName}" /> 
        </sdk:DataGrid.Columns> 
       </sdk:DataGrid> 


PersonGrid.ItemsSource = context.Person; 
context.Load(context.GetPersonEager()); 


public IQueryable<Person> GetPersonEager() 
    { 
     return this.ObjectContext.Person.Include("CarNavigation"); 
    } 
이 구조
internal sealed class Person 
     { 
      private PersonMetadata() { } 

      public int personID { get; set; } 

      public string personName { get; set; } 

      [Include] 
      public Car CarNavigation { get; set; } 

     } 


internal sealed class Car 
     { 
      private CarMetadata() { } 

      public string carName { get; set; } 

      public int personID { get; set; } 

     } 

는 업데이트를 꽤 잘 작동합니다. 차의 이름도 업데이트 할 수 있습니다.

그러나 나는 자동차를 소지하지 않은 사람도 기재하고 싶습니다. 그리고 나는 또한 자동차를 추가 할 수 있기를 원합니다. 나는 시도했다 :

public IQueryable<Person> GetPersonEagerWhoDoesNotHaveACar() 
     { 
      return this.ObjectContext.Person.Include("CarNavigation").Where(x => x.CarNavigation == null); 
     } 

위의 방법은 나에게 차가없는 사람을 돌려 준다. 그러나 Car 엔티티는 비어있다. 어떻게하면 차가없는 사람들을 돌려주고 차 엔티티의 키가 채워지도록 수정해야합니까?

+0

귀하의 질문을 이해할 수 있을지 잘 모르겠습니다. 빈 Car 엔터티를 반환 하시겠습니까? – Danexxtone

+0

"personID"필드가 채워지고 carName이 비어있는 Car 엔티티를 반환하고 싶습니다. 그래서 나는 그것을 채울 수있다. 차가없는 사람을 찾으면서 왼쪽 조인을하기 때문에 차 (car ')의 personID 필드를 알 수 있습니다. 따라서 엔티티 프레임 워크도이를 알아야합니다. 그러나 GetPersonEagerWhoDoesNotHaveACar() 메서드는 차가없는 사람을 반환하지만 Person.CarNavigation.personID 필드가 채워질 것으로 예상합니다. 어쩌면 내 쿼리가 잘못되었거나 EF가 지원하지 않거나 일부 사용자 지정을 수행해야하거나 다른 방법을 개발해야 할 수도 있습니다.) – fkucuk

답변

0

"어떤 사람은 차가 있지만 단 하나의 자동차"인 경우 잘못된 DB 구조를가집니다. Person에 Nullable carId를 두지 않는 이유는 무엇입니까? 이러한 경우에 당신은 관련이 있거나 상관없이 원하는 모든 것을 쉽게 포함하고 조작 (추가, 삭제 등) 할 수 있습니다. Car.

참고 : 현재 아키텍처에서 이러한 접근 방식을 필요로하는 경우 - 쿼리를 반환해야하는 항목 (연결된 항목이 아닌 경우 Car가있는 사람의 목록)은 어떤 목적으로 명확하게 지정해야합니다.

+0

실제 아키텍처를 단순화하려고했습니다. 죄송하지만 "쿼리를 반환해야하는 항목을 추가하고 어떤 용도로 추가 할 것인가"라는 의미를 이해하지 못했습니다. – fkucuk

+0

@caisenm Ok. 나는 당신이 edmx의 관계에 문제가 있다고 생각합니다. 그래서 당신은 당신 물건에 갇혀 있습니다. –

+0

@caisenm 죄송합니다, 답변이 편집되었습니다. –