C# 不更新数据库

C# 不更新数据库,c#,wpf,entity-framework,C#,Wpf,Entity Framework,我有以下两个由实体框架生成的类 public partial class Datagrid { public int Id { get; set; } public string Name { get; set; } public string Location { get; set; } public Nullable<bool> IsChecked { get; set; } } public partial class SampleDbCont

我有以下两个由实体框架生成的类

public partial class Datagrid
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }
    public Nullable<bool> IsChecked { get; set; }
}

public partial class SampleDbContext : DbContext
{
    public SampleDbContext()
        : base("name=SampleDbContext")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Datagrid> Datagrids { get; set; }
}

变量“dg”必须是databaseContext(代码中的“db”)DataGrid属性的一部分。例如:

foreach (CheckBox cb in myBoxes)
{      
    dg.IsChecked = cb.IsChecked; 
    db.DataGrids.Add(dg);
    db.SaveChanges(); 
} 

.SaveChanges()只会将分配给DataGrid属性的项刷新到数据库。

根据您的评论,我不完全清楚是否需要每次创建复选框或只是更新复选框。如果创建,它将与另一个答案类似。但是,由于尝试添加新的Datagrid而未提供
名称
位置
,因此可能会得到
系统.Data.Entity.Validation.DbEntityValidationException
,它们不可为空,并且(可能)不会像
Id
那样自动填充:

foreach (CheckBox cb in myBoxes)
{      
    Datagrid dg = new Datagrid
      {
        Name = "NameGoesHere"; // Maybe you're wanting to use cb.Name or cb.Text?
        Location = "Location Here";
        IsChecked = cb.IsChecked;
      };


    db.DataGrids.Add(dg);
    db.SaveChanges(); 
} 
如果您只是更新,我仍然不确定您在哪里设置了
dg
,但您可能希望从以下位置查找:

foreach (CheckBox cb in myBoxes)
{
  Datagrid dg = db.DataGrids.Where(g => g.Name == cb.Name).SingleOrDefault();
  // etc.
根据评论进行编辑:


如果您正在进行双向绑定,并且已将
复选框直接绑定到
数据网格
实体的
IsChecked
值,那么除了调用
db.SaveChanges()之外,不需要做任何事当您准备好保存时。绑定的
Datagrid
实体将自行更新。

每次如何设置
dg
?我的应用程序中的Forevery复选框,我想将复选框值分配给数据库中的Ischecked,这是位值。谢谢。但是我得到了一个异常,例如EntityFramework.dll中出现了未处理的System.Data.Entity.Validation.DbEntityValidationException。请帮助。是不是因为数据库中可空类型不匹配..谢谢你的帮助。基本上我有一个listview控件,每行都有一个复选框。复选框的值(无论是否选中)来自上面提到的DataGrid类IsChecked属性。因此,在UI上,我有一个按钮和listview。因此,基本上,如果用户将任何复选框更改为选中或未选中,我希望将其选中的内容保存到数据库中(双向绑定)。我有代码来确定用户选中或取消选中了哪些复选框。我想保存这些更改。基本上使用实体框架更新数据库的IsChecked值。您的解决方案非常清晰,谢谢。。但是我不想编辑名称和位置列,因为它们不像你说的那样是空的。我只想更新IsChecked列,即为每行更新单个列。有没有一种方法可以做到这一点..补充到上面的答案--如果你真的在做双向绑定,只要确保它设置正确,然后你需要做的就是保存。无需再次跟踪所有复选框。
foreach (CheckBox cb in myBoxes)
{
  Datagrid dg = db.DataGrids.Where(g => g.Name == cb.Name).SingleOrDefault();
  // etc.