2014-09-19 84 views
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值更新用戶在前端複選框中選中的值。所以我assinging 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的連接字符串錯誤地指向另一個數據庫/實例?它發生在我身上很多。 – ilans 2014-09-19 20:05:01

+0

你的代碼沒有任何意義,因爲你說你想從數據庫更新一個值,但是你正在獲取這個值,而不是使用.Add,它標記了要創建/插入的實體而不是更新。 – 2014-09-19 21:07:43

+0

另一件事你的代碼不會很快,因爲你正在做的非數據庫查詢與線DB.Datagrids.ToList()[i]這行首先獲取數據表Datagrids中的所有條目,但你只在特定的索引中進行查詢。我會建議閱讀一些關於EF的教程如何以正確的方式做到這一點。 – 2014-09-19 21:12:41

回答

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); 
+0

感謝您的幫助。首先我有一個錯誤的連接字符串,然後我修改了我的代碼,只是說db.savechanges()而不是所有的東西..它的工作.. – nikhil 2014-09-19 21:11:10

+0

我的榮幸... :) – ilans 2014-09-19 21:19:16