Datetime default value ADO.NET Entity Framework

18 Ноя
2011

Есть такая замечательная штука как ADO.NET Entity Framework, если быть кратким то она позволяет «мышкой» создать все необходимые модели, их взаимоотношения, а затем на основе полученных моделей с легкостью создать базу данных.

Но, как сделать так чтобы в свойство сущности с типом DateTime вставилось default значение равное DateTime.Now?

Например у нас есть сущность «Статья», и нее есть свойство Created (Дата и время создания). Чтобы во всех местах где создается статья не указывать время создания, куда удобней модифицировать модель сущности.

Код который был сгенерирован автоматически:

/// <summary>
        /// No Metadata Documentation available.
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.DateTime Created
        {
            get
            {
                return _Created;
            }
            set
            {
                OnCreatedChanging(value);
                ReportPropertyChanging("Created");
                _Created = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("Created");
                OnCreatedChanged();
            }
        }
        private global::System.DateTime _Created;
        partial void OnCreatedChanging(global::System.DateTime value);
        partial void OnCreatedChanged();

Соответственно, меняем get функцию на

            get
            {
                //return _Created;
                return (this._Created == default(DateTime)) ? DateTime.Now : this._Created;
            }

Единственный минус в этом подходе, что если Вы будете что-то менять в модели, Ваши изменения удаляться. Генератор будет создавать классы и все изменения будут удалены.
Поэтому пойдем другим путем.

Расширим генерированный студией класс.
Добавляем класс:

/// <summary>
    /// Статья
    /// </summary>
    partial class Topic
    {
        public Topic()
        {
            this._Created = DateTime.Now;
        }
    }

Теперь в поле Created будет всегда задана дата.

Есть еще один, путь — отредактировать шаблоны генератора классов, но это уже совсем другая история.

Оставить комментарий или два

Наверх
Rambler's Top100