2014-04-10 2 views
0

저는 MVC에 익숙하지 않으므로 익숙하지 않습니다.별도의 테이블에서 MVC 뷰에 데이터 추가

나는 프로젝트를 실험하고 있는데 다음과 같은 문제에 봉착했다. 외래 키 관계로 연결되어 있지 않은 경우 별도의 데이터베이스 테이블에서 데이터를 가져 오는 방법.

하나의 열이 다른 테이블의 값과 일치하거나 일치하지 않을 수있는 테이블이 있는데, 표시해야하는 경우이를 표시해야합니다.

예 :

테이블의 위시리스트와 테이블 StuffAtStore있다 간단하게 말할 수 있습니다 그들은 이러한 필드가 : 어떤 그런 경우

StuffAtStore 
    Price 
    Name 

Wishlist 
    Name 
    Person 

내가 StuffAtStore의 모든 항목을 나열 할과 that StuffAtStore.Name == Wishlist.Name "On"+ Wishlist.Person + "wishlist"텍스트를 가격 뒤에 추가하고 싶습니다. 나는 일에 무엇을 얻을 수 나는 온라인으로 볼 몇 가지 제안을 바탕으로

public partial class StuffAtStore 
{ 
    public string PersonIfAny 
    { 
     get 
     { 
      FooEntities db = new FooEntities(); 

      if (db.Wishlist.Any(w => w.Name == Name)) 
      { 
       return db.Wishlist.First(w => w.Name == Name).Person; 
      } 
      else 
      { 
       return ""; 
      } 
     } 
    } 
} 

그리고

@Html.DisplayFor(modelItem => item.Price) 

@if (item.PersonIfAny != "") 
{ 
    @Html.PersonIfAny(modelItem => item.PersonIfAny) 
} 

그러나 자연이 아주 아주 느린 같은 것을 창조했다.

MVC로이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

+0

이는 것 같아 여기에

은 좋은 튜토리얼입니다 MVC보다 데이터베이스 문제가 더 많다. – NWard

답변

0
당신은 정말 다음과 같은 뷰 모델 클래스를 가진 고려해야

:

class StuffViewModel { 
    string Name { get; set; } 
    string Price { get; set; } 
    string PersonIfAny { get; set; } 
} 

를 그런 다음 Controller/Action에, :

void YourAction(...) { 
    FooEntities db = new FooEntities(); 
    var stuff = db.StuffAtStore.Select(s => 
     new StuffViewModel 
     { 
      Name = s.Name, 
      Price = s.Price, 

      // This will use Outer Apply, which may not be available 
      // for EF providers other than Microsoft's MSSQL provider. 
      PersonIfAny = db.Wishlist.Where(w => w.Name == s.Name) 
          .Select(w => w.Person).FirstOrDefault(); 
     } 

    foreach(var s : stuff) 
    { 
     s.PersonIfAny = s.PersonIfAny ?? ""; 
    } 


    return View(stuff); 

} 
1

이것은 실제로 MVC 질문이 아니지만 효율적인 방식으로 데이터를 검색하는 방법에 대한 질문입니다.

Entity Framework를 사용하고있는 것 같습니다. StuffAtStore와 Wishlist 사이에는 데이터베이스 수준의 외래 키가 없지만 EF의 두 엔티티간에 관계를 만들 수 있습니다. 그런 다음 StuffAtStore를 검색 할 때 간단히 위시리스트를 포함시킬 수 있습니다. 위시리스트에 해당 항목이 포함되어 있지 않으면 컬렉션이 비어있게됩니다.

위의 목록 항목이 실제로 항목을 저장하는 경우 데이터베이스 디자인으로 돌아가서 임의의 이름 열을 통해 연결하려고 시도하는 대신 이러한 테이블간에 외래 키를 가져야합니다.

0

아마도 너는 너의 시야에 ViewModel을 만들 수있다. 실제로 컨트롤러에서보기에 제공하는 간단한 클래스이며 일부 멤버 (예 : List<string>, 이미 준비된 문자열이 표시 될 것임)를 선언하고 테이블 사이에 조인을 사용하여 쿼리를 생성하는 생성자 (글쎄, 사실은 왼쪽 조인).

ViewModels (MVVM 패턴은 아니지만 거의)은보기에 복잡한 데이터 구조를 표시하는 가장 좋은 방법으로 기본 클래스 (Model)가 완벽하게 적합하지 않으면 정말 간단 해집니다.http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-3

관련 문제