Структура сущности, где Удалено = 0 - PullRequest
0 голосов
/ 01 сентября 2011

Мне нужно добавить этот простой оператор в каждый запрос SQL для каждой таблицы:

WHERE Deleted = 0

Есть ли простой способ сделать это?Я имею в виду, мне нужно отфильтровать все записи, желательно в файле EDMX.

Ответы [ 3 ]

5 голосов
/ 01 сентября 2011

Звучит так, будто вы хотите добавить WHERE к вашим наборам объектов по умолчанию. Я не знаю, можете ли вы сделать это по умолчанию, но я могу придумать несколько способов сделать это:

1) Используйте представления, чтобы дать вам предложение WHERE, и создайте свои сущности из представлений. На самом деле я никогда не делал этого, поэтому я не знаю, насколько хорошо представления работают с EF - если вам нужно выполнить обратную запись в базу данных, это, вероятно, не сработает.

2) Создайте новые свойства в частичном классе вашего EDMX, например:

partial class MyEntities
{
    public IQueryable<Foo> ActiveFoos
    {
        return Foos.Where(f => f.Deleted == 0);
    }
}
...
using (var context = new MyEntities())
{
    var foo = context.ActiveFoos.Where(f => f.Id == 1).SingleOrDefault();
}

3) Создайте дочерний класс контекста и new извлеките свойства - довольно уродливо, но это будет достаточно прозрачно для разработчика после его создания.

public class CustomEntities : MyEntities
{
    public new IQueryable<Foo> Foos
    {
        get { return base.Foos.Where(f => f.Deleted == 0); }
    }
}
...
using (var context = new CustomEntities())
{
    var foo = context.Foos.Where(f => f.Id == 1).SingleOrDefault();
}
2 голосов
/ 02 сентября 2011

Единственный надежный способ гарантировать, что Deleted = 0 используется всегда (включая отложенную загрузку, явную загрузку и активную загрузку), использует Условное отображение . Недостаток условного сопоставления заключается в том, что столбец Deleted будет недоступен в объекте = операция удаления, которая устанавливает этот столбец, должна быть сопоставлена ​​с хранимой процедурой.

0 голосов
/ 01 сентября 2011

Вы должны сделать это в тот момент, когда получите результаты от EntityFramework.

Пример:

IEnumerable<TableEntity> filteredResults = TableEntityName.Where(t => t.Delete = 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...