2013-02-24 1 views
2

В архитектуре данных я должен бороться, есть нет удалений. Вместо этого все записи имеют значение NULL, равное NULL, которое сигнализирует, что запись была «отключена». Это означает, что в случаях прямого выбора сущностей мне всегда нужно добавить проверку, чтобы убедиться, что объект был отключен или нет.Код элемента Entity Framework Первый: существует ли способ автоматического фильтрации отключенных строк из DbSets?

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

Уверен, что кто-то еще скинул эту кошку раньше. Есть ли лучший способ сделать это с помощью Entity Framework? Я просто не привык?

ответ

2

Я полагаю, вы могли бы сделать что-то вроде этого

public class MyContext : DbContext 
{ 
    public IDbSet<Thing> Things { get; set; } 
    public IQueryable<Thing> EnabledThings 
    { 
     get 
     { 
      return Things.Where(t => t.Enabled); 
     } 
    } 
} 

или же, как метод расширения (но контекст не DbSet/queriable).

Лично на практике я на самом деле именно так, как у вас есть в вашем примере и использовать Things.Enabled().Whatever

+0

Да, я думаю, я буду придерживаться того, что у меня есть. Я просто надеялся, что будет кто-то, кто хотел: «О, да, вам просто нужно реализовать IAwesome и перевернуть этот бит Wiffle и этот бит Waffle, и bango! Вы получите то, что вам нужно ...» ... Благодарю. –

1

Я не знаю ничего родного для Entity Framework. Но обычно, когда я сталкиваюсь с этим, я создаю слой «репозиторий», с которым я запускаю большинство транзакций базы данных. Затем я создаю такие методы, как GetAll(), который возвращает все элементы с соответствующими инструкциями where, чтобы скрыть «удаленные» элементы.

1

Я думаю, что, может быть, вы могли бы решить это с помощью таблицы за иерархией inherritance

This link may help