У меня есть классы, сгенерированные каркасом сущности, следующим образом
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);
}
}
Прежде всего, эта строка кажется подозрительной:
dg.Id=dg.Id;
Я думаю, это просто опечатка. Если да, то лучше, если вы поместите фактическую строку кода в свой вопрос.
Если это не проблема, попробуйте установить атрибут ключа в поле id
(даже если вам нужен ваш собственный идентификатор, просто попробуйте это, поэтому, если он работает, у вас будет начальная точка для решения проблемы):
[Key]
public int Id { get; set; }
Затем удалите подозрительную строку (typo?):
dg.Id=dg.Id;
Другой способ, который не решает вашу проблему, но стоит попробовать. Поместите эту строку:
db.Entry(dg).State = System.Data.EntityState.Added;
Вместо:
db.Datagrids.Add(dg);