Db.SaveChanges()在发布模式下无法正确保存

时间:2017-07-13 20:26:46

标签: entity-framework sqlite uwp

我试图将复选框保存到db。它可以在调试模式下正常工作,但在没有代码优化的情况下切换到发布或自定义发布,如here所解释的那样。 Db是Sqlite。在数据库浏览器中查找SQLite SimpleCheck字段在发布时仅为NULL或0,在调试时为0,0或1。 (编者)

        private void SetSingleCheck(CheckBox box)
    {
        var processId = (int)box.Tag;
        using (var db = new AgendaContext())
        {
            var check = db.Checks.SingleOrDefault(c => (c.ProcessId == processId) && (c.Date.Date == SelectedDate.Date.Date));
            if (null == check)
            {
                check = new Check()
                {
                    ProcessId = processId,
                    Date = SelectedDate.Date
                };
                db.Checks.Add(check);
            }
            if  (box.IsChecked.HasValue)
            {
                check.SimpleCheck = box.IsChecked.Value;
            }                
            db.SaveChanges();
        }
    }

模型的相关部分,以防万一:

    public class Check //Check if this process is ok or not, TODAY
{
    public int CheckId { get; set; }        
    public DateTimeOffset Date { get; set; }
    public Process Process { get; set; }
    public int ProcessId { get; set; }
    public bool? SimpleCheck { get; set; } //USed for checked situations. example: clean this thing: Ok, i have cleaned it.
    public bool? DoubleCheck { get; set; } //Used for ok/no ok after doing something.
    public ObservableCollection<Temperature>Temperatures { get; set; }
}
        public DbSet<Check>Checks { get; set; }

有什么不对或丢失?谢谢。

1 个答案:

答案 0 :(得分:0)

错误源位于模型中

public bool? SimpleCheck { get; set; }

由于sqlite中没有布尔值,如果ef核心转换器可以为空,它似乎会失败,如果为false则为0,如果为true则为0,而预期结果为0和1.在测试解决方案中重现。只是让它不可为空并在代码中调整空值检查就可以了。