2014-09-18 81 views
2

我已经由实体框架生成以下两类..不更新数据库

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应用程序,其中我有一个包含对于每一列checkboxs列表视图..我写的逻辑到找到在列表视图中选中的复选框..但是,当我遍历检查框并尝试保存到数据库时,数据库没有更新,请帮助.. 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 
} 
+1

'dg'每次如何设置? – UtopiaLtd 2014-09-18 21:50:28

+0

Forevery在我的应用程序中的复选框,我想将复选框的值分配给数据库中的位值为Ischecked – nikhil 2014-09-18 22:38:09

回答

1

您的变量'dg'将需要成为数据网格的'数据库'(代码中的'数据库')DataGrid的属性的一部分。示例:

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

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

+1

谢谢不管怎么样..但是我得到了一个异常,如未处理的System.Data.Entity.Validation.DbEntityValidationException'发生在EntityFramework .dll ....请帮忙。是否因为数据库中的可空类型不匹配.. – nikhil 2014-09-18 22:22:44

1

根据你的意见,我不完全清楚,如果复选框需要每次创建或只是更新。如果创建,它将有点像其他答案。但是,你可能会得到System.Data.Entity.Validation.DbEntityValidationException由于尝试添加新的DataGrid不提供NameLocation,这是不可为空并且不是(大概)自动填充像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. 

编辑:

如果你做双向绑定,并已直接绑定CheckBox下载到Datagrid实体IsChecked值,你不需要做任何其他比简单地调用db.SaveChanges();当您准备好保存。绑定的Datagrid实体将自行更新。

+0

感谢您的帮助。基本上我有一个列表视图控制与每一行复选框。如上所述,复选框的值是否来自DataGrid类IsChecked属性。所以在UI上我有一个按钮以及listview。所以基本上,如果用户将任何复选框更改为选中或取消选中,我想将他检查的内容保存到数据库中(双向绑定)。我有代码来确定用户选中或未选中的复选框..我想保存这些更改。使用实体框架基本更新数据库的IsChecked值。 – nikhil 2014-09-19 05:24:43

+0

您的解决方案非常清楚,谢谢..但我不想编辑名称和位置列不是null,正如你所说。我只想更新IsChecked列,即为每一行更新单列。有没有办法做到这一点.. – nikhil 2014-09-19 05:38:06

+0

添加到上面的答案 - 如果你真的在做双向绑定,只要确保它的设置正确,然后所有你需要做的就是保存。不需要再次跟踪所有的复选框。 – UtopiaLtd 2014-09-19 06:00:36