保存到数据库时如何避免空日期转换为DateTime.Min值?实体框架

时间:2012-02-14 16:44:12

标签: asp.net .net entity-framework formview

我有一个带有日期输入文本框的表单。如果我提供日期一切都很好。如果我没有提供日期(我将其留空),则发送DateTime.min(1/1/0001)值。这会导致错误:将datetime2数据类型转换为日期时间数据类型会导致超出范围的值

我的日期属性定义为可为空:

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

如果我不提供日期,我想要的是写入数据库的空值。 我知道我可以在我的更新方法中检查1/1/0001并发送null,但是,我必须这样做吗? 有解决这个问题的方法吗?谢谢

修改

我解决了将以下代码添加到我的更新方法中的问题:

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 个答案:

答案 0 :(得分:2)

问题是您的UI控件(FormView)不会将空字符串转换为null,而是转换为DateTime.MinValue。您的财产很乐意接受这个值,因为它毕竟是一个有效的日期。

可以找到解决方案here。基本上,有一个专门针对这种情况的参数属性,它被称为ConvertEmptyStringToNull