Задать вопрос

Как создать вычислимое поле в модели Code First Entity Framework 6?

Добрый день.

Создаю модель данных Code First в Entity Framework 6. Появилась необходимость создать у сущности вычислимое свойство. Например, количество по документу есть сумма количеств по всем его строкам, потому хранить такое поле в таблице неправильно. На SQL я бы написал:

select *
, coalesce((select sum(r.Quantity) from DocumentRows r where r.document_id=d.id), 0) as Quantity
from Documents d
where

Как мне убедить Entity Framework при выборке из Documents создавать именно такой запрос, чтобы свойство Quantity у сущности Document было, а поля в таблице – не было?

Сущности описаны как-то так:

public partial class Document
{
public Guid id {get; private set; }

public virtual ICollection Rows {get; private set;}

...
}

public partial class DocumentRow
{
public Guid id {get; private set;}

public virtual Document Document {get; set;}

public decimal Quantity {get; set;}
...
}
  • Вопрос задан
  • 826 просмотров
Подписаться 4 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Решения вопроса 1
Создать partial класс для сущности Document под именем Document.MyExtensionBlaBla.cs; добавить в него новое свойство TotalQuantity и определить логику его вычисления:

public partial class Document
{
     public decimal TotalQuantity => Rows.Sum(x => x.Quantity)
}


Впоследствии, к этому свойству можно обращаться из инстанса Document. Например, так:

var totalSumByDocument = new dbCtx().Documents.Single(x => x.Id == id)).TotalQuantity;


Где id - входной параметр искомого документа, представляющий собой его уникальный идентификатор.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Был подобный вопрос и у меня, нашел это Computed Columns, работает только с той же таблицей где находится сущность.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы