【发布时间】:2017-12-18 19:23:39
【问题描述】:
我正在尝试将复选框保存到数据库。它可以在调试模式下正常工作,但如here 所解释的那样,在没有代码优化的情况下切换到发布或自定义发布不会。 Db 是 Sqlite。使用 DB Browser 查找 SQLite SimpleCheck 字段在发布时为 NULL 或 0,在调试时为 NULL、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; }
出了什么问题或遗漏了什么?谢谢。
【问题讨论】:
-
所以你已经在发布模式下单步执行了代码,它进入了上面的 SetSingleCheck 方法,box.IsChecked 有一个值在 SaveChanges 调用之前进入 SimpleCheck,并且没有有什么异常被抛出/吃掉吗?只是为了澄清一下,通过检查“HasValue”,您基本上是在说复选框将默认为不确定状态,只有当用户单击它以将其设置为真、假(或返回不确定)时,SimpleCheck 才会更新。如果它是 True 或 False,SimpleCheck 将是“true”。如果保留为不确定,则为“False”。
-
对,没有抛出异常。对不起,这个错误你是对的,最近犯了这个错误,但之前通过使用 check.simplecheck = box.IsChecked().Value 设置它不起作用我的意思是它可以为 null 但这个方法的默认值是错误的。 "如果选中了 ToggleButton,则为 true;如果未选中 ToggleButton,则为 false;否则为 null。默认为 false。"
-
所以那里的断点被击中并调用了 SaveChanges?在调查此类问题时,我通常会在 SaveChanges 调用上使用断点,在 SaveChanges 执行之前检查数据(如果是更新),然后在 SaveChanges 之后立即检查它以验证记录更改是否持续,然后再让它继续。在某些情况下,罪魁祸首是在堆栈中执行和撤消更改或竞争条件的进一步代码。 (单步执行时有效,无人看管时失败。)
-
是的,它被调用并且数据似乎一直都正常。抓住它是什么,将在回答中解释,谢谢。
标签: entity-framework sqlite uwp