不更新数据库

时间:2014-09-18 21:45:38

标签: c# wpf entity-framework

我有以下两个由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 SampleDbContext : DbContext
{
    public SampleDbContext()
        : base("name=SampleDbContext")
    {
    }

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

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

我有一个WPF应用程序,我有一个列表视图,其中包含每列的复选框..我已经编写了逻辑来查找列表视图中检查的复选框..但是当我遍历复选框时并尝试保存到数据库,数据库没有更新请帮助.. dg是Datagrid类型的对象.. db是SampleDbContext类型的对象

foreach (CheckBox cb in myBoxes)
{
    dg.IsChecked = cb.IsChecked; //I want to update each column with the checked value in the listview. cb.Ischecked works perfectly..It says true for the checkboxes that are checked else false
    db.SaveChanges(); //NOT updating the database
} 

2 个答案:

答案 0 :(得分:1)

你的变量&#39; dg&#39;将需要成为dataContext的一部分(&#39; db&#39;在您的代码中)DataGrid的属性。一个例子:

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

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

答案 1 :(得分:1)

根据您的评论,我不清楚是否每次都需要创建复选框或者只是更新复选框。如果创建,它将有点像另一个答案。但是,由于尝试添加新的Datagrid而未提供System.Data.Entity.Validation.DbEntityValidationExceptionName,因此您可能会获得Location,这些Idforeach (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 1}}:

foreach (CheckBox cb in myBoxes)
{
  Datagrid dg = db.DataGrids.Where(g => g.Name == cb.Name).SingleOrDefault();
  // etc.

如果您只是更新,我仍然不确定您在哪里设置CheckBox,但也许您可能希望从以下位置查找:

IsChecked

根据评论进行修改:

如果您正在进行双向绑定并将Datagrid es直接绑定到db.SaveChanges();个实体的Datagrid值,那么您不应该做任何事情除了在您准备好保存时简单地致电{{1}}。绑定的{{1}}实体将自行更新。