Ошибка переполнения SqlDateTime при сохранении DateTime.MinValue на объекте POCO - PullRequest
7 голосов
/ 05 апреля 2011

У меня были проблемы с сомом при сохранении объектов POCO со свойством DateTime. Когда свойство DateTime имеет значение DateTime.MinValue, функция SaveChanges () завершается ошибкой из-за разницы между SqlDateTime.MinValue и DateTime.MinValue.

Итак, что делать?

1) Стоит ли проверять DateTime.MinValue перед сохранением сущности?

2) Должен ли мой объект POCO с датой и временем проектироваться примерно так?

    private SqlDateTime _created;
    public virtual DateTime Created
    {
        get
        {
            return _created.Value;
        }
        set 
        {
            _created = value == DateTime.MinValue ? SqlDateTime.MinValue : value;
        }
    }

/ PW

Ответы [ 2 ]

6 голосов
/ 05 апреля 2011

Если возможно, я бы порекомендовал сделать поле базы данных обнуляемым и установить значение null, а не min.

В качестве альтернативы я бы разработал свойство следующим образом:

private SqlDateTime? _created;
public virtual DateTime Created
{
    get
    {
        return (DateTime)(_created ?? SqlDateTime.MinValue);
    }
    set
    {
        if (value == null || value < (DateTime)SqlDateTime.MinValue)
        {
            _created = SqlDateTime.MinValue;
        }
        else 
        {
            _created = (SqlDateTime)value;
        }
    }
}
4 голосов
/ 22 июля 2011

Самым простым подходом, который я могу придумать, является инициализация DateTime свойств (DateTime)SqlDateTime.MinValue:

public class SomeEntity
{
    public SomeEntity()
    {
        Updated = (DateTime)SqlDateTime.MinValue;
    }

    public DateTime Updated { get; set; }
}
...