Как избежать преобразования пустой даты в значение DateTime.Min при сохранении в базу данных?Рамки сущностей - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть форма с текстовым полем для ввода даты. Если я предоставлю дату все хорошо. Если я не предоставляю дату (я оставляю ее пустой), отправляется значение DateTime.min (1/1/0001). И это вызывает ошибку: Преобразование типа данных datetime2 в тип данных datetime привело к значению вне допустимого диапазона

Свойство "Моя дата" определено как обнуляемое:

public Nullable<System.DateTime> InstallDate { get; set; }

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

EDIT:

Я решил проблему, добавив приведенный ниже код в свой метод обновления:

tank.InstallDate = tank.InstallDate == DateTime.MinValue ? null : tank.InstallDate;

Итак, мой код выглядит так:

public void UpdateTank(Tank tank)
{
    using (RetailFuelEntities ctx = new RetailFuelEntities())
    {
        tank.InstallDate = tank.InstallDate == DateTime.MinValue ? null : tank.InstallDate;
        ctx.Tanks.Attach(tank);
        ctx.Entry(tank).State = EntityState.Modified;
        ctx.SaveChanges();
    }
}

Вот мой ObjectDataSource:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetTank"
                            TypeName="DataAccess.Fuel.EF4.Tanks" DataObjectTypeName="DataAccess.Fuel.EF4.Tank"
                            DeleteMethod="DeleteTank" InsertMethod="InsertTank" UpdateMethod="UpdateTank">
                            <SelectParameters>
                                <asp:ControlParameter ControlID="TextBoxTankId" Name="TankId" PropertyName="Text"
                                    Type="String" />
                            </SelectParameters>
                        </asp:ObjectDataSource>

Интересно, можно ли избежать проверки на ноль.

1 Ответ

2 голосов
/ 14 февраля 2012

Проблема в том, что ваш элемент управления пользовательского интерфейса (FormView) не преобразует пустую строку в null, а вместо этого в DateTime.MinValue.Ваша собственность с радостью принимает это значение, потому что в конце концов это действительная дата.

Решение можно найти здесь .По сути, есть атрибут параметра специально для этого случая, и он называется ConvertEmptyStringToNull.

...