Как использовать стандартную 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 в С# всякий раз, когда объект создается, либо явно в коде, в конструкторе частичного класса, либо даже во время события изменений.
Существуют ли другие способы достижения того, что я хочу, когда вместо этого используется значение значения по умолчанию, которое хранится в таблице базы данных?
Ответы
Ответ 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 в базе данных.
Ответ 7
Я думаю, что ответ, предоставленный lazyberezovsky на другой вопрос SO, является прямым решением этой проблемы Entity Framework и дата по умолчанию
Ответ 8
Только что случилось с этим. Entity Framework не поддерживает значения по умолчанию самостоятельно. Вам необходимо установить свойство StoreGeneratedPattern = Вычислено в столбце в элементе файла Edmx. Значением по умолчанию, которое вы установили в базе данных, будет предшествовать то, что EF задает по умолчанию, то есть DateTime.Min