2013-05-30 3 views
1

Я пытаюсь изучить MVC 3/4 с помощью visual studio 2012. Я создал представление, модель и контроллер. 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

Отличный совет! Tanx – AminSaghi

1

Необходимо создать запрос. Объект Apartments представляет таблицу в базе данных, а не список.

+0

Не могли бы вы дать мне отправную точку :) –

+0

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

0

Альтернатива иметь оберточный интерфейс вокруг контекста, чтобы скрыть эти данные, так что это относится к каждому запросу прозрачно:

// 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 параметра может быть подключен к EFApartmentRepository, оштрафовав класс DefaultControllerFactory. Вы используете инфраструктуру DI, такую ​​как NInject или StructureMap, чтобы вставить правильную реализацию в конструктор во время выполнения.

Смежные вопросы