2011-03-23 102 views
0

나는 내가보기에 목록을 반환하고 여행을 통해 반복하고있어 그런액세스 모델 개체

public long FerryId { set;get; } 
public long FromLocationId { set;get; } 
public long ToLocationId { set;get; } 

public Ferry Ferry { set;get; } 
public Location FromLocation { set;get; } 
public Location ToLocation { set;get; } 

Grails의 도메인 클래스의 생각 // 다음과 같은 모델

여행 모델이 있습니다

@foreach (var item in Model) { 
    @item.FerryId //displays fine 
    @item.Ferry.FerryName //displays fine 
    @item.FromLocationId //displays fine 
    @item.FromLocation.LocationName //doesn't work 
    @item.ToLocationId //displays fine 
    @item.ToLocation.LocationName //doesn't work 
} 

문제는 "item.ToLocation.LocationName"을 가져오고 "item.FromLocation.LocationName"에 대해서도 마찬가지입니다.

Ferry.FerryName이 반환하는 이유가 무엇인지에 대해 혼란 스럽습니다.

나는 C#/MVC3/Razor의 신입생이다. 그러나 grails/groovy에서 이것은 전혀 문제가되지 않을 것이다. 어떤 생각이든 ? 그리고 일반적인 조언이 있습니까? 크게 감사드립니다.

답변

1

는 "않습니다 무슨 소리하지 이잖아 작업"? 진단 할 수있는 오류 메시지가 있습니까?

나는 그저 교육용 추측을 할 수 있습니다 ... 나는이 모델 개체를 데이터베이스에서 검색하기 위해 Entity Framework를 사용하고 FromLocation과 ToLocation이 다른 엔터티에 대한 참조임을 추측합니다. 이것이 맞다면 모델을 뷰에 전달하기 전에 명시 적으로 데이터베이스에서 해당 특성을로드하도록 EF에 지시해야합니다. 꽤 쉽습니다 ... 을 LFQ 쿼리에 추가하여 EF 컨텍스트에서 항목을 검색합니다.

'eager loading'기술과 관련된 항목을로드하는 데 필요한 옵션에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/bb896272.aspx을 참조하십시오.

+0

Robert; 당신은 맞다, 나는 Entity Framework/LINQ를 사용하고있다. 나는 당신의 솔루션을 시도하고 확인하겠다. 감사 –

0

내게는 내가 묻기 시작한 것으로 보입니다. FromLocation/ToLocation.LocationName의 접근자는 무엇입니까? 공개입니까?

죄송합니다, 그것은 바보 같은 질문이지만, 때로는 저를 얻는 것들 ...

HTH,

\ ^/병

+0

예, 답변을 주셔서 감사합니다. –

0

나는 문서를 쳐다 보면서 쿼리는 문제가되지이었다

var trips = DB.Trips.Include("FromLocation").Include("ToLocation").ToList(); 

하지만 난 저장에 여행하는 locaiton 개체를 추가를 수동으로 실시했다 :

[HttpPost] 
public ActionResult Create(Trip trip) 
{ 
    var fromLocation = DB.Locations.Find(trip.FromLocationId); 
    var toLocation = DB.Locations.Find(trip.ToLocationId); 
    trip.FromLocation = fromLocation; 
    trip.ToLocation = toLocation; 
    if (ModelState.IsValid) 
    { 
     DB.Trips.Add(trip); 
     DB.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    else 
    { 
     return View(trip); 
    } 
} 

을하고 지금은 수 중첩 된 객체로드 :

@item.ToLocation.LocationName 
@item.FromLocation.LocationName 

페리 객체의 경우 퍼즐을 추가 할 필요가 없습니다. 추가하지 않아도됩니다. 수동으로!