Сохранять только поле для чтения только для чтения с 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;
}
}
Я хотел бы запустить этот расчет в коде, но значение продолжительности сохраняется в базе данных вместе со значениями времени начала и окончания (чтобы упростить позже, когда я пришел, чтобы запускать отчеты против этих цифр).
Мой вопрос в том, как я могу получить это свойство только для чтения, чтобы сначала отобразить и сохранить в базу данных с помощью кода?
Ответы
Ответ 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 не отображаются в столбце базы данных.