2014-12-03 3 views
0

В дизайнере объектов я устанавливаю условное сопоставление в сущности, где он фильтрует всех клиентов по полю 'isactive'.Изменение условия сущности в linq

Это нормально работает с проблемой, но проблема возникает в моем linq.

Что произойдет, когда мне нужно установить клиента в «IsActive = false». Свойство не привязано к моей сущности, потому что условие отображается, но в Linq я не могу найти способ его изменить.

using (var db = new CustDbConn()) 
{ 

    Customer customer= db.Customers.Single(p => p.Id == idFromEmail); 
    customer.IsActive = false; //<----NOT FOUND, can not resolve 'isActive' 

} 

Должен быть способ доступа и изменения условий в LINQ, может кто-то пролить свет на это? Я подумал об обход модели и просто ее обновить с помощью SqlCommand, но мне не нужно было все это проходить.

ответ

1

Вы не можете изменить модель (это вы пытаетесь сделать) с помощью запроса LINQ.

Единственный способ манипулировать имуществом IsActive состоит в том, чтобы довести его до модели Customer и выбросить условное отображение.

UPD.

Вы недопонимаете основную цель условного сопоставления - inheritance.
Обратите внимание, что с использованием EF вы не работаете с таблицами базы данных, вы работаете с типами объектов. Все, что у вас есть, - это модель. Если в модели отсутствует какое-либо поле таблицы, чем да, вы не можете получить к нему доступ через модель. Что касается вашего вопроса, то да, вы не можете изменить статус активности пациентов, потому что не зарегистрирован в статусе.

И да, если вы планируете использовать какой-либо маркер удаления/активности (например, IsActive), вы должны включить его в свои запросы, иначе вы получите неактивные/удаленные элементы в результатах. Конечно, вы можете сделать вспомогательный/хранилище/обертку/и т.д., чтобы автоматизировать:

interface IEntity 
{ 
    int Id { get; } 
    bool IsActive { get; set; } 
} 

interface IRepository<T> 
    where T : IEntity 
{ 
    IQueryable<T> Get(bool includeInactiveEntities = false); 
} 
+0

просто проверить, в случае, если я не сделал себе ясно, вы хотите сказать, что я не могу изменить один из больных активным статус в самой таблице, если я использую условное сопоставление? Разве это не преувеличивает цель иметь условие, если оно всегда должно быть установлено при создании базы данных или добавлении новой записи? Если я верну его, тогда мне придется добавить 'where isactive = true' ко всем запросам, связанным с клиентами. – prospector

+0

Обновлен ответ. – Dennis

+0

спасибо за объяснение, я понимаю основную цель условного сопоставления. И я хотел бы сохранить его, поэтому мне не нужно включать его в каждый запрос, я считаю, что лучшим решением является изменение значения в базе данных напрямую с помощью обновления SqlCommand в этом случае и обход модели. – prospector

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