2014-09-18 68 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