Фильтрация наборов сущностей на уровне модели данных - PullRequest
0 голосов
/ 15 декабря 2010

У меня есть сценарий, в котором я хотел бы отфильтровать некоторые наборы сущностей на уровне модели, а не на уровне запроса, т.е. я в основном хочу «жестко закодировать» фильтрацию в моей модели, чтобы мне не всегда приходилось повторять тот же метод Где фильтрация в каждом запросе против набора сущностей. Более конкретно, у меня есть набор сущностей CampaignTypes, и в модели данных, с которой я занят, мне нужны только типы кампаний, относящиеся к определенной бизнес-сфере. Без фильтрации нижнего уровня, которую я ищу, каждый раз, когда я запрашиваю CampaignTypes, мне придется использовать CampaignTypes.Where(ct => ct.BusinessArea == BusinessAreas.Outdoor). Как можно избежать этой повторяющейся фильтрации, если не создавать представление БД и не использовать его в моей модели?

Ответы [ 3 ]

1 голос
/ 15 декабря 2010

вы можете создать другое свойство с другим именем в другом файле, расширение основного неполного класса вашей модели.

EDIT:

namespace YourNameSpace
{
    using System.Data.Objects;

    public partial class SomeModelEntities
    {
        public ObjectSet<CampaignType> FilteredCampaignTypes
        {
            get
            {
                if ((_CampaignType == null))
                {
                    _CampaignType = base.CreateObjectSet<CampaignType>("CampaignType");
                }
                return _CampaignType.Where(ct => ct.BusinessArea == BusinessAreas.Outdoor);
            }
        }
    }
}
1 голос
/ 15 декабря 2010

Вы можете добавить еще один слой (логический слой) между кодом, который не должен беспокоиться о фильтре и наборе сущностей.Этот слой может возвращать IQuerable или любой другой объект, и он будет применять фильтр к набору сущностей и возвращать результаты.

Таким образом, другим частям вашего приложения не придется беспокоиться о применении этого фильтра, и этопо-прежнему один запрос (для большинства случаев), который выполняется к базе данных.

0 голосов
/ 15 декабря 2010
public IQueryable<CampaignType> getCampaignTypes()
{
    using (var context = new TestEntities())
    {
        var campaignTypes = context.CampaignTypes.
            Where(ct => ct.BusinessArea == BusinessAreas.Outdoor).
            AsQueryable<CampaignTypes>();
        return campaignTypes;
    }
}

Используйте результат этого метода вместо прямого доступа к контексту.Вы также можете изменить запрос так, чтобы он возвращал список, набор и т. Д., Изменив метод «AsQueryable» на «AsList» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...