2014-11-19 4 views
0

저는 Entity Framework와 MVC를 사용합니다. 주소 ID로 주소 목록 순서가 필요합니다. 하지만 엔터티 프레임 워크가 주소 목록을 채우지 않도록 정렬에 대한 속성을 캡슐화 할 때. 무엇을 할 수 있습니까?가상 목록을 사용한 1 : n 관계의 순서 <T>

public class Student 
{ 
    public int StudentId { get; set; } 
    public string Name{ get; set; } 
    public string Surname{ get; set; } 

    //i need this address list order by address id??? 
    public virtual List<StudentAddress> Address { get; set; } 
} 

public class StudentAddress 
{ 
    [Key] 
    public int AddressId{ get; set; } 

    public string Address { get; set; } 
    public string City { get; set; } 

} 
+0

왜 목록의 순서가 수업에 관심이 있습니까? 특정 순서로 표시하려면 UI에서 순서를 지정하십시오. –

+0

내가 많이 사용하기 때문에. – Yargicx

+1

그런 다음 필요할 때마다 주문하십시오. 또한 Id에 의한 주문이 항상 좋은 생각은 아닌 것으로 의심합니다. 만약 학생과 Id 2가 기본 주소가되면 어떻게 될까요? – DavidG

답변

0

나는 EF/SQL을 통해이 작업을 수행하여 방법을 알고 아니지만, 당신은 같은 것을 할 수있는 : 나는 믿고있어

protected IEnumerable<StudentAddress> addresses; 
public virtual IEnumerable<StudentAddress> Address 
{ 
    get { return addresses; } 
    set 
    { 
     addresses = value == null ? null : value.OrderBy(a => a.AddressId); 
    } 
} 
0

을 당신은 말했다, 그러나 언제 캡슐화 할 때 엔터티 프레임 워크가 주소 목록을 채우지 못한다 '는 Entity Framework가 주소 목록을 채우지 않고 여기서 게으른 로딩을 사용하고 있다는 것을 나타냅니다.

람다를 지원하는 .Include()를 사용하려면 System.Data.Entity를 가져와야합니다. 당신이 너무 좋아 당신이 정렬하려는 속성, 상에있는 OrderBy()를 적용 할 수 있습니다 그것을 Include'ing 후 :

DbContext.Students.Include(s => s.Address.OrderBy(a => a.AddressId)) 

을 당신은 또한 아마 IList의, 된 IQueryable 또는 IEnumerable을 사용하여 목록을 교체하는 것이 더 낫다. 주소에 삽입 작업을 지원하려면 IList를 사용하는 것이 가장 좋습니다.

+3

그럴 일은 없을거야. http://stackoverflow.com/a/15389265/1453076 – Vladimirs

+0

아, 알겠습니다. 내 대답의 결함을 지적 해 주셔서 감사합니다. – Toolmaker

2

관계는 관계형 모델링 표준에 따라 정렬되지 않은 것으로 간주되므로 사용자는 할 수 없으며 주문을 신뢰해서는 안되지만 데이터를 표시하기 전에 주문을 적용해야합니다. 그래서 당신은 같은 주문 주소로 익명의 유형을 선택할 수 있습니다

students.Select(x => new { Student = x, Addresses = x.Address.OrderBy(y => y.AddressId)) }) 

그리고 당신은 코드 중복에 대해 걱정하는 경우 별도의 방법으로 그것을 포장하고 다시 사용할 수 있습니다.