Не удалось обновить Entity Framework

1

У меня есть классы, сгенерированные каркасом сущности, следующим образом

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
    Таким образом, вы не получите никаких исключений? может быть, строка подключения вашего web.config по ошибке указывает на другую базу данных / экземпляр? это случается со мной много.
  • 0
    Ваш код на самом деле не имеет никакого смысла, так как вы говорите, что хотите обновить значение из базы данных, но вы выбираете значение и затем используете .Add, который отмечает объект, который будет создан / вставлен вместо обновления.
Показать ещё 2 комментария
Теги:
sql-server
entity-framework
wpf
listview

1 ответ

0
Лучший ответ

Прежде всего, эта строка кажется подозрительной:

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);
  • 0
    Спасибо за помощь. Сначала у меня была неправильная строка подключения, а затем я изменил свой код и просто сказал db.savechanges () вместо всего ... Он работает ..
  • 0
    С удовольствием... :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню