Entity Framework 4.1 - переопределить объект (DBSet) с помощью фильтра - PullRequest
9 голосов
/ 17 января 2012

Я пытаюсь сделать что-то, что должно быть относительно легко, но я просто не знаю, как это сделать.

У меня есть созданный объект, который я бы хотел переопределить, добавив оператор Linq Where.

При этом частичное для контекста:

public partial class MyEntities: DbContext
{
    public MyEntities()
        : base("name=MyEntities")
    {
    }    
    public DbSet<Assignee> Assignees { get; set; }
}

Я создал новую часть MyEntities и попробовал следующее

public override DbSet<Assignee> Assignees 
{
    get
    {
        return this.Assignees.Where(z => z.IsActive == true);
    }
    set; 
}

но это выдает ошибку неоднозначности (что очевидно).

Как мне это сделать?

Спасибо

Ответы [ 5 ]

11 голосов
/ 17 января 2012

Попробуйте выставить DbSet<Assignee> и IQueryable<Assignee> с разными именами

public partial class MyEntities: DbContext
{
    public MyEntities()
        : base("name=MyEntities")
    {
    }

    public DbSet<Assignee> AssigneesSet { get; set; }

    public IQueryable<Assignee> Assignees 
    {
        get
        {
            return AssigneesSet.Where(z => z.IsActive == true);
        }
    }
}
2 голосов
/ 26 апреля 2012

Вы пытались добавить условие в отображение таблицы в вашей модели? Щелкните правой кнопкой мыши по объекту в вашем edmx и выберите «Table Mapping». Затем «Добавить условие». Вероятно, более элегантное решение.

1 голос
/ 17 января 2012
public override DbSet<Assignee> Assignees 
{
    get
    {
        return base.Assignees.Where(z => z.IsActive == true);
    }
    set; 
}

Это то, что вы хотите?

0 голосов
/ 31 октября 2016

Я знаю, что это очень старый, но другой простой и элегантный способ, без изменения каких-либо существующих имен, это использование ключевого слова new для скрытия исходного члена, например:

public new IQueryable<Assignee> Assignees 
{
    get
    {
        return base.Assignees.Where(z => z.IsActive == true);
    }
}

Просто хотел поделиться для любых будущих посетителей, надеюсь, это поможет!

0 голосов
/ 24 февраля 2014

Хорошей практикой является создание классов репозитория в папке DAL (используйте нужное имя). Тогда делай фильтры там. Вот учебник Microsoft для этого:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

В зависимости от того, какое условие вы хотите, невозможно установить условие отображения EF, вот причина: http://entityframework.codeplex.com/workitem/48

...