我有实体框架生成的类如下
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应用程序,其中我有一个包含每行复选框的列表视图。我编写了代码以在buttonclick上检查复选框的值。当我尝试使用复选框的选定值更新数据库时,它什么都不做。请帮助..看看这段代码。复选框中的所有选项都可以正常工作。我只想用用户在前端复选框中检查的值更新数据库中的Ischecked值。所以我正在帮助dg避免验证错误..
try
{
int i = 0;
IEnumerable<CheckBox> myBoxes = FindVisualChildren<CheckBox>(this);
foreach (CheckBox cb in myBoxes)
{
Datagrid dg = db.Datagrids.ToList()[i];
dg.Id=dg.Id;
dg.Name = dg.Name;
dg.Location = dg.Location;
dg.IsChecked = cb.IsChecked;
db.Datagrids.Add(dg);
db.SaveChanges();
i++;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:0)
首先,这条线似乎很可疑:
dg.Id=dg.Id;
我猜这只是一个错字。如果是这样,那么将实际的代码行放在你的问题中会更好。
如果不是问题,请尝试将关键属性设置为id
字段(即使您需要自己的ID,只需尝试一下,如果它有效,那么您就可以了有一个解决问题的起点):
[Key]
public int Id { get; set; }
然后,删除可疑(拼写错误?)行:
dg.Id=dg.Id;
另一种方式,它无法解决您的问题,但值得尝试。把这一行:
db.Entry(dg).State = System.Data.EntityState.Added;
而不是:
db.Datagrids.Add(dg);