2013-05-30 5 views
1

Visual Studio 2012를 사용하여 MVC 3/4를 배우려고합니다. 뷰, 모델 및 컨트롤러를 만들었습니다. VS가 나를 위해 모든 데이터베이스 항목을 만들었습니다. 그것은 나를 위해 gridview를 추가, 편집하거나 삭제하는 새로운 행을 추가 할 수 있습니다. 데이터베이스에서 행을 선택하는 방식을 변경하고 싶습니다. 나는 그것을 위해 DbContext를 변경해야한다는 것을 알고있다. 여기 맞춤 dbcontext 작성 방법

내 DbContext가

,

public class ApartmentContext : DbContext 
{ 

    public ApartmentContext() : base("name=ApartmentContext") 
    { 
    } 

    // this part has to be changed**** 
    public DbSet<Apartment> Apartments { get; set; } 
} 

공공 DbSet 아파트 {...}는 것 같아요 목록을 반환하지만 나는 그것이 행을 선택하는 방법을 변경하고 싶습니다. 예를 들어; "플래그"열이 1로 설정된 행을 선택하고 싶습니다. 어떻게해야합니까?

감사합니다.

답변

2

DbContext가 아닌 관련 컨트롤러에서 결과를 필터링해야합니다.

... 
ApartmentContext db = new ApartmentContext(); 
var apartments = db.Apartments.Where(a => a.Flag == 1); 
... 

다음 뷰 렌더링하기 위해 apartment 객체를 사용

+2

성명을 사용하여 데이터베이스 컨텍스트를 생성해야합니다. 수동으로 폐기하십시오. 이것 없이는 메모리 누수가 발생할 수 있습니다. –

+0

위대한 팁! 황갈색의 – AminSaghi

1

쿼리를 작성해야합니다. 개체 Apartments은 목록이 아니라 데이터베이스의 테이블을 나타냅니다.

+0

내게 줄 점이 있겠습니까? –

+0

http://vatsal-desai.blogspot.com/2011/04/linq-to-entity-framework-tutorial.html –

0

당신은 또한 당신의 TSQL 문 또는 저장 프로 시저를 실행하는 엔티티 프레임 워크 dbconext을 사용할 수 있습니다 : 그것은 해당 컨트롤러에서 다음과 같이 될 수있다. 다음은 그것을위한 링크입니다.

// Wrapping interface 
public interface IApartmentRepository 
{ 
    IQueryable<Apartment> Apartments { get; } 
} 

// As before 
public class ApartmentContext : DbContext 
{ 
    ... 
} 

// Implementing class, hiding the DbContext object 
public class EFApartmentRepository : IApartmentRepository 
{ 
    private ApartmentContext context = new ApartmentContext(); 

    public IQueryable<Apartment> Apartments 
    { 
     get { return this.context.Apartments.Where(a => a.Flag == 1); } 
    } 
} 

// Your controller uses DI to get the controller 
public class HomeController : Controller 
{ 
    private IApartmentRepository apartmentContext; 

    public HomeController(IApartmentRepository rep) 
    { 
     this.apartmentContext = rep; 
    } 
} 

이 컨트롤러 IApartmentRepository 매개 변수에 매여 할 수 있습니다 투명하게 모든 쿼리에 적용이 그래서

http://www.dotnetjalps.com/2012/04/execute-tsql-statement-with.html

0

대안은 이러한 세부 사항을 숨길 수있는 상황 주위에 포장 인터페이스를 가지고있다 DefaultControllerFactory 클래스를 오버라이드하여 EFApartmentRepository NInject 또는 StructureMap과 같은 DI 프레임 워크를 사용하여 런타임시 올바른 구현을 생성자에 삽입합니다.