2014-09-18 6 views
2

Я следующие два класса, порождаемые 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, где у меня есть вид списка, содержащий checkboxs для каждого столбца .. Я написал для логики найдите те флажки, которые отмечены в представлении списка. Но когда я повторяю отмеченные флажки и пытаюсь сохранить базу данных, база данных не обновляется, пожалуйста, помогите .. dg является объектом типа Datagrid .. db is объект типа 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

+0

Forevery checkbox в моем приложении, я хочу присвоить значение checkbox Ischecked, которое является битовым значением в базе данных. – nikhil

ответ

1

Ваша переменная 'dg' должна быть частью базы данныхContext ('db' в вашем коде) Свойство DataGrid. Пример:

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

.SaveChanges() будет только флеш элементы, присвоенное свойству DataGrid к базе данных.

+1

Спасибо в любом случае..Но я получаю исключение, такое как Unhandled System.Data.Entity.Validation.DbEntityValidationException 'произошел в EntityFramework .dll .... Пожалуйста, помогите. Это из-за несоответствия типа nullable в базе данных. – nikhil

1

Основываясь на ваших комментариях, я не совсем понимаю, нужно ли создавать флажки каждый раз или просто обновляться. Если он создан, он будет похож на другой ответ. Тем не менее, вы, вероятно получение System.Data.Entity.Validation.DbEntityValidationException из-за попытки добавить новую DataGrid без предоставления Name и Location, которые не являются обнуляемым и не являются (предположительно) заполняется автоматически, как 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. 

Edit на основе комментариев:

Если вы делаете двухсторонние связывания и непосредственно связаны CheckBox эсов к IsChecked значениям Datagrid лиц, вы не должны делать ничего, кроме просто позвонить db.SaveChanges();, когда вы будете готовы, чтобы спасти. Связанные объекты Datagrid будут обновляться самостоятельно.

+0

Спасибо за помощь. В основном у меня есть элемент управления listview с флажком для каждой строки. Значение флажка независимо от того, отмечены ли они или нет, исходит из свойства DataGrid класса IsChecked, как указано выше. Поэтому в пользовательском интерфейсе есть кнопка со списком. Поэтому в основном, если пользователь меняет любые флажки для проверки или снятия флажка, я хочу сохранить то, что он проверяет в базе данных (двухсторонняя привязка). У меня есть код для определения того, какие флажки проверены или сняты флажком. Я хочу сохранить эти изменения. Исправлено обновление IsChecked значения базы данных с использованием Entity Framework. – nikhil

+0

Ваше решение настолько ясное спасибо. Но я не хочу редактировать столбцы имени и местоположения, которые не являются нулевыми, как вы сказали. Я хочу только обновить столбец IsChecked. I.e обновить один столбец для каждой строки. Есть ли способ сделать это. – nikhil

+0

Добавлен ответ выше - если вы действительно выполняете двустороннюю привязку, просто убедитесь, что он настроен правильно, а затем все, что вам нужно сделать, это сохранить. Больше не нужно отслеживать все флажки. – UtopiaLtd

Смежные вопросы