我具有由實體框架生成的類如下實體框架更新失敗
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);
}
}
所以你沒有得到任何的異常?也許你的web.config的連接字符串錯誤地指向另一個數據庫/實例?它發生在我身上很多。 – ilans 2014-09-19 20:05:01
你的代碼沒有任何意義,因爲你說你想從數據庫更新一個值,但是你正在獲取這個值,而不是使用.Add,它標記了要創建/插入的實體而不是更新。 – 2014-09-19 21:07:43
另一件事你的代碼不會很快,因爲你正在做的非數據庫查詢與線DB.Datagrids.ToList()[i]這行首先獲取數據表Datagrids中的所有條目,但你只在特定的索引中進行查詢。我會建議閱讀一些關於EF的教程如何以正確的方式做到這一點。 – 2014-09-19 21:12:41