2011-05-07 9 views
1

저는 ASP.NET MVC를 처음 사용하면서이 프로젝트를 처음 사용했습니다. 나는 간단한 TaskList를 만들고 싶다. 나는 ASP.NET에서 꽤 괜찮은 편이지만 ASP.NET MVC 나 Linq에 대해서는 거의 알지 못합니다. 따라서 응답 할 때이 점을 명심하십시오.ASP.NET MVC3에서이 모델을 만드는 방법은 무엇입니까?

저는 Db를 생성하기 위해 CodeFirst Entity Frameword를 사용하고 있습니다.

사용자 (ID, 이름) 및 작업 (ID, 사용자 ID, 이름)의 두 테이블이 있습니다. 사용자 및 작업 속성을 보유하는 두 개의 Model 개체를 만들었습니다. 그래서 int userID를 데이터베이스 디자인으로 사용하는 대신 Task 클래스 내에 User 클래스가 있어야 Task를 특정 사용자에게 연결할 수 있습니다.

은 어떻게 든 내가
var model = from t in _db.Tasks 
       join u in _db.Users on t.User.ID equals u.ID 
       select new { UserID = u.ID,UserName = u.Name,t.Name,t.ID }; 
    return View(model); 

LINQ

사용하여 조인을 만들 관리했습니다하지만 난 아마이 오류가 발생할 수있는 작업 모델에 바인더 제본, 뷰에 바인딩 할 수 없습니다.

어떻게이 문제를 해결할 수 있습니까? ViewModel과 같은 것을 만들 필요가 있습니까?

감사합니다 ...

답변

1

당신은 ViewModel을 만들어야하고보기에 전달 :

그래서 이것을 시도

public class TaskViewModel 
{ 
    public int TaskId { get; set; } 
    public string TaskName { get; set; } 
    public int UserId { get; set; } 
    public int Username { get; set; } 
} 

강력한 형식의 뷰 생성보다 :

@model IEnumerable<YourNamespace.Models.TaskViewModel> 
//Display model data 

그리고 Linq에를 검색어 :

var model = from t in _db.Tasks 
      join u in _db.Users on t.User.ID equals u.ID 
      select new TaskViewModel 
      { 
       TaskId = t.ID,      
       TaskName = t.Name, 
       UserId = u.ID, 
       Username = u.Name 
      }; 
1

Linq 쿼리는 지연된 실행을 사용합니다. 쿼리 자체가 레코드를 보유하지 않으며 실행을 위해 무언가를해야한다는 것을 의미합니다.

return View(model.ToList()); 
+0

@model IEnumerable , Tasks에는 User.Name이 포함되어 있지 않습니다. ViewModel을 작성해야합니까? – eugeneK

+0

@eugeneK - 예, 쿼리가 반환하는 ViewModel을 만들고 View에서 해당 VM을 사용하도록 할 수 있습니다. – klabranche

+0

그런 데이터를 결합 할 수있는 뷰 모델을 만들어야합니다. – Gho5t

관련 문제