2016-08-09 5 views
0

Я реализую мягкое удаление в своем приложении с столбцом IsDeleted и использую EF 6 Code First для ORM. Я хочу, чтобы отфильтровать удаленные объекты автоматически при использовании оператора точки для доступа к отложенной загрузки навигационных свойств (со многими отношения) .Для примера: Пользователь имеет много ролейEntity Framework 6 автоматическая фильтрация для ленивых навигационных свойств загрузки

public class User 
{ 
    private ICollection<Role> _roles; 
    public virtual ICollection<Role> Roles 
    { 
     get { return _roles?? (_roles= new List<Role>()); } 
     protected set { _roles= value; } 
    } 
} 

и мне нужно, что, когда я использую user.Roles, это будет автоматически удален фильтр объектов, поэтому я не буду писать это явно нравится, потому что это будет происходить во многих местах:

user.Roles.where(u => u.IsDeleted == false).ToList(); 

Я думал о EF перехватчик, но будет применяться для всех запросов, и я все еще хочу загружать удаленные объекты в некоторых местах из-за требований бизнеса. Есть ли другой способ достичь этого эффективно?
Спасибо.

ответ

0

Вы можете просто добавить "более правильный" свойство инкапсулировать логику:

public class User 
{ 
    private ICollection<Role> _roles; 
    public virtual ICollection<Role> Roles 
    { 
     get { return _roles ?? (_roles = new List<Role>()); } 
     protected set { _roles = value; } 
    } 

    public IEnumerable<Role> ActiveRoles 
    { 
     get { return this.Roles.Where(u => !u.IsDeleted); } 
    } 
} 

Использование:

IEnumerable<Role> roles = user.ActiveRoles; // easy 
  • Я предполагаю, что ваши объекты в конечном счете реализовать некоторые IDeletable или что-то.
    Это было опущено

Вы также можете рассмотреть вопрос о реализации метода расширения IEnumerable<IDeletable> Active() и беспорядок будет перемещен в части использования: user.Roles.Active(). Не могу сказать, какой подход будет более изящным для вашего дела.

+0

Thanks SimpleVar. Но у моего приложения есть тысячи таких коллекций, поэтому было бы очень много времени, если я добавлю больше свойств оболочки или использую метод расширения Active(). –

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

  • Нет связанных вопросов^_^