Подтвердить что ты не робот

Сохранять только поле для чтения только для чтения с Entity Framework Code First

Я использую Entity Framework Code First, и у меня есть сущность, определенная с свойством StartTime, свойством EndTime и свойством Duration (наряду с некоторыми другими). Свойством Duration является вычисленное поле, и это продолжительность в минутах между временем начала и окончания. Мои объявления свойств показаны ниже:

public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public int Duration
{
    get
    {
        return (int)this.EndTime.Subtract(this.StartTime).TotalMinutes;
    }
}

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

Мой вопрос в том, как я могу получить это свойство только для чтения, чтобы сначала отобразить и сохранить в базу данных с помощью кода?

4b9b3361

Ответ 1

Вдохновленный ответом Slauma, я смог добиться того, к чему я стремился, используя защищенный сеттер. Это сохраняло значение обратно в базу данных, но не позволяло изменять значение в другом месте.

Теперь моя собственность выглядит следующим образом:

public int Duration
{
    get
    {
        return (int)this.EndTime.Subtract(this.StartTime).TotalMinutes;
    }
    protected set {}
}

Ответ 2

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

public int Duration
{
    get
    {
        return (int)this.EndTime.Subtract(this.StartTime).TotalMinutes;
    }
    set { }
}

Насколько мне известно, свойства readonly не отображаются в столбце базы данных.