Сохранять вычисляемое поле только для чтения с кодом Entity Framework First - PullRequest
11 голосов
/ 14 апреля 2011

Сначала я использую Entity Framework Code, и у меня есть объект, определенный со свойством 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;
    }
}

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

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

Ответы [ 2 ]

19 голосов
/ 14 апреля 2011

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

Моя собственность теперь выглядит так:

public int Duration
{
    get
    {
        return (int)this.EndTime.Subtract(this.StartTime).TotalMinutes;
    }
    protected set {}
}
2 голосов
/ 14 апреля 2011

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

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

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

...