首页 > 解决方案 > 开始日期保存到数据库,而不是 DataPicker 中选择的日期

问题描述

你好我有奇怪的问题。我想将 DataPicker 中的日期保存到数据库。

在视图中

<DatePicker Name="Date" 
            SelectedDate="{Binding Path=Date, UpdateSourceTrigger=PropertyChanged}"  />

在 ViewModel -> 如果用户没有从 DatePicker 中选择任何日期,则设置默认值 - 今天的日期

public DateTime Date
{
    get { return item.date == DateTime.MinValue ? DateTime.Today : item.date; }
    set
    {
        if (value != item.date)
        {
            item.date = value;
            OnPropertyChanged(() => Date);
        }
    }
}

第一种情况:用户在 DatePicker 中选择的日期不是今天

断点:日期 {12.02.2020 00:00:00} System.DateTime

结果:一切正常,在数据库中保存 12.02.2020


第二种情况:用户在 DatePicker 中选择了今天的日期

断点:日期 {27.02.2020 00:00:00} System.DateTime

结果:一切正常,数据库已保存 27.02.2020


第三种情况:用户没有选择日期(日期是自动设置的)

断点:日期 {27.02.2020 00:00:00} System.DateTime

结果:一切都错了,在数据库中保存 1.1.1

标签: c#sqldatetime

解决方案


问题似乎是属性值仅在get方法中设置为正确的值,但实体框架不会以这种方式跟踪更改 - 我相信您必须告诉 EF 对象属性已被修改。

认为这样的事情应该可以解决问题(在你打电话之前SaveChanges):

dbContext.Entry(item).Property(i => i.Date).IsModified = true;

推荐阅读