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

Как использовать стандартную Entity Framework и значения даты по умолчанию

В моей схеме базы данных SQL Server у меня есть таблица данных с полем даты, которое содержит значение по умолчанию

CONVERT(VARCHAR(10), GETDATE(), 111)

который идеально подходит для автоматической установки даты в новую запись при ручном вводе записей в базу данных.

Проблема заключается в том, что при использовании инфраструктуры Entity Framework и сопоставления поля Date, Entity Framework вставляет значение по умолчанию DateTime.Min при создании экземпляра объекта.

Я не могу сопоставить поле Date с нулевым значением DateTime, то есть DateTime?, и я не могу использовать CONVERT или DateTime.Now.Today в стандартном значении Entity Designer, поскольку он принимает только жестко заданные значения констант.

Я могу, конечно, явно установить поле DateTime в С# всякий раз, когда объект создается, либо явно в коде, в конструкторе частичного класса, либо даже во время события изменений.

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

4b9b3361

Ответ 1

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

Ответ 2

Создайте частичный класс для вашего EntityObject, добавьте конструктор по умолчанию и задайте значения по умолчанию в нем.

    public partial class YourDBObject
    {
          public YourDBObject()
          {
               this._DateField = DateTime.Now;
          }
    }

Ответ 3

Вы можете использовать триггер базы данных, который при вставке проверяет, является ли вставленное значение DateTime.MinValue(01.01.0001) и заменяет это с вычисленным значением, которое вы желаете. Эта статья

Ответ 4

Это действительно неудачно. Ответы, ссылающиеся на StoreGeneratedPattern, не являются истинным решением, которое не позволяет вам устанавливать значение.

Вся команда должна будет сделать что-то вроде этого:

    [Required]
    [DefaultValue] // suggested attribute, whatever you want to call it
    public DateTime Created { get; set; }

Если поле помечено DefaultValue, то при времени генерации EF SQL свойства с этим атрибутом будут проверяться, если field == default(DateTime), если это так, то просто опустите этот столбец из сгенерированного кода.

Ответ 5

У меня была аналогичная проблема с использованием служб RIA с Entity Framework. Мне не удалось установить значение в конструкторе по умолчанию на клиентской стороне, потому что у созданных там классов объектов уже есть пустой конструктор по умолчанию.

Решением, которое я использовал, было внедрение OnCreated частичного метода для объекта на клиенте, установив требуемое значение по умолчанию.

Ответ 6

Поле даты может отображаться в DateTime? только если столбец имеет значение NULL в базе данных.

Ответ 8

Только что случилось с этим. Entity Framework не поддерживает значения по умолчанию самостоятельно. Вам необходимо установить свойство StoreGeneratedPattern = Вычислено в столбце в элементе файла Edmx. Значением по умолчанию, которое вы установили в базе данных, будет предшествовать то, что EF задает по умолчанию, то есть DateTime.Min