我试图将复选框保存到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; }
有什么不对或丢失?谢谢。
答案 0 :(得分:0)
错误源位于模型中
public bool? SimpleCheck { get; set; }
由于sqlite中没有布尔值,如果ef核心转换器可以为空,它似乎会失败,如果为false则为0,如果为true则为0,而预期结果为0和1.在测试解决方案中重现。只是让它不可为空并在代码中调整空值检查就可以了。