Winforms DbContext.SaveChanges()不将更改保存到数据库
DbContext.SaveChanges()不会将更改保存到数据库,而是更新网格。不按我所希望的方式工作的方法是在Winforms DbContext.SaveChanges()不将更改保存到数据库,winforms,entity-framework,entity-framework-6,Winforms,Entity Framework,Entity Framework 6,DbContext.SaveChanges()不会将更改保存到数据库,而是更新网格。不按我所希望的方式工作的方法是在bSave\u Clickmethod中。如何强制它同时更新数据库 Windows窗体应用程序的代码如下: namespace WinFormsApp { public partial class MainForm : Form { private List<User> users; private List<U
bSave\u Click
method中。如何强制它同时更新数据库
Windows窗体应用程序的代码如下:
namespace WinFormsApp
{
public partial class MainForm : Form
{
private List<User> users;
private List<UserType> userTypes;
private List<DataGridViewUserDTO> usersForGrid;
public MainForm()
{
InitializeComponent();
GetData();
PrepareGrid();
FillGrid();
}
public void GetData()
{
using (var dbContext = new DataInFileEntities())
{
userTypes = dbContext.UserTypes.ToList();
users = dbContext.Users.ToList();
usersForGrid = users.Select(x => new DataGridViewUserDTO() { Id = x.Id, FirstName = x.FirstName, LastName = x.LastName, UserTypeId = x.UserTypeId, CreatedById = x.CreatedById, Created = x.Created, EditedById = x.EditedById, Edited = x.Edited }).ToList();
}
}
public void FillGrid()
{
var gridBindingList = new BindingList<DataGridViewUserDTO>(usersForGrid);
gridBindingSource = new BindingSource(gridBindingList, null);
dgvUsers.DataSource = gridBindingSource;
}
public void PrepareGrid()
{
dgvUsers.AutoGenerateColumns = false;
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.DataPropertyName = "Id";
col.HeaderText = "Id";
col.Name = "Id";
col.ReadOnly = true;
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dgvUsers.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.DataPropertyName = "FirstName";
col.HeaderText = "First Name";
col.Name = "FirstName";
dgvUsers.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.DataPropertyName = "LastName";
col.HeaderText = "Last Name";
col.Name = "LastName";
dgvUsers.Columns.Add(col);
DataGridViewComboBoxColumn userTypeCol = new DataGridViewComboBoxColumn();
userTypeCol.DataPropertyName = "UserTypeId";
userTypeCol.HeaderText = "User Type";
userTypeCol.Name = "UserTypeId";
userTypeCol.DataSource = new BindingList<UserType>(userTypes);
userTypeCol.DisplayMember = "Name";
userTypeCol.ValueMember = "Id";
dgvUsers.Columns.Add(userTypeCol);
col = new DataGridViewTextBoxColumn();
col.DataPropertyName = "Edited";
col.HeaderText = "Edited";
col.Name = "Edited";
col.ReadOnly = true;
dgvUsers.Columns.Add(col);
DataGridViewComboBoxColumn editedByCol = new DataGridViewComboBoxColumn();
editedByCol.DataPropertyName = "EditedById";
editedByCol.HeaderText = "Edited By";
editedByCol.Name = "EditedById";
editedByCol.DataSource = new BindingList<DataGridViewUserDTO>(usersForGrid);
editedByCol.DisplayMember = "Name";
editedByCol.ValueMember = "Id";
editedByCol.ReadOnly = true;
dgvUsers.Columns.Add(editedByCol);
col = new DataGridViewTextBoxColumn();
col.DataPropertyName = "Created";
col.HeaderText = "Created";
col.Name = "Created";
col.ReadOnly = true;
dgvUsers.Columns.Add(col);
DataGridViewComboBoxColumn createdByCol = new DataGridViewComboBoxColumn();
createdByCol.DataPropertyName = "CreatedById";
createdByCol.HeaderText = "Created By";
createdByCol.Name = "CreatedById";
createdByCol.DataSource = new BindingList<DataGridViewUserDTO>(usersForGrid);
createdByCol.DisplayMember = "Name";
createdByCol.ValueMember = "Id";
createdByCol.ReadOnly = true;
dgvUsers.Columns.Add(createdByCol);
}
private void bSave_Click(object sender, EventArgs e)
{
using (var dbContext = new DataInFileEntities())
{
foreach (var row in usersForGrid)
{
var dbItem = dbContext.Users.Where(x => x.Id == row.Id).SingleOrDefault();
if (dbItem != null)
{
if (dbItem.FirstName != row.FirstName || dbItem.LastName != row.LastName || dbItem.UserTypeId != row.UserTypeId)
{
dbItem.FirstName = row.FirstName;
dbItem.LastName = row.LastName;
dbItem.UserTypeId = row.UserTypeId;
dbItem.Edited = DateTime.UtcNow;
dbItem.EditedById = 1;
}
}
}
dbContext.SaveChanges();
}
GetData();
FillGrid();
}
}
public class DataGridViewUserDTO
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Name { get { return FirstName + " " + LastName; }}
public byte UserTypeId { get; set; }
public Nullable<System.DateTimeOffset> Edited { get; set; }
public Nullable<int> EditedById { get; set; }
public System.DateTimeOffset Created { get; set; }
public int CreatedById { get; set; }
}
}
名称空间WinFormsApp
{
公共部分类主窗体:窗体
{
私人名单用户;
私有列表用户类型;
私有列表用户ForGrid;
公共表格(
{
初始化组件();
GetData();
PrepareGrid();
FillGrid();
}
public void GetData()
{
使用(var dbContext=new datainfillentities())
{
userTypes=dbContext.userTypes.ToList();
users=dbContext.users.ToList();
usersForGrid=users.Select(x=>newdatagridviewuserdto(){Id=x.Id,FirstName=x.FirstName,LastName=x.LastName,UserTypeId=x.UserTypeId,CreatedById=x.CreatedById,Created=x.Created,EditedById=x.EditedById,Edited=x.Edited}).ToList();
}
}
公共空间填充网格()
{
var gridbindingslist=新的bindingslist(usersForGrid);
gridBindingSource=新的BindingSource(gridBindingList,null);
dgvUsers.DataSource=gridBindingSource;
}
public void PrepareGrid()
{
dgVuser.AutoGenerateColumns=false;
DataGridViewTextBoxColumn=新DataGridViewTextBoxColumn();
col.DataPropertyName=“Id”;
col.HeaderText=“Id”;
col.Name=“Id”;
col.ReadOnly=true;
col.AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells;
dgvuser.Columns.Add(col);
col=新的DataGridViewTextBoxColumn();
col.DataPropertyName=“FirstName”;
col.HeaderText=“名字”;
col.Name=“FirstName”;
dgvuser.Columns.Add(col);
col=新的DataGridViewTextBoxColumn();
col.DataPropertyName=“LastName”;
col.HeaderText=“姓氏”;
col.Name=“LastName”;
dgvuser.Columns.Add(col);
DataGridViewComboBoxColumn userTypeCol=新DataGridViewComboxColumn();
userTypeCol.DataPropertyName=“UserTypeId”;
userTypeCol.HeaderText=“用户类型”;
userTypeCol.Name=“UserTypeId”;
userTypeCol.DataSource=新绑定列表(userTypes);
userTypeCol.DisplayMember=“Name”;
userTypeCol.ValueMember=“Id”;
dgvuser.Columns.Add(userTypeCol);
col=新的DataGridViewTextBoxColumn();
col.DataPropertyName=“已编辑”;
col.HeaderText=“已编辑”;
col.Name=“已编辑”;
col.ReadOnly=true;
dgvuser.Columns.Add(col);
DataGridViewComboBoxColumn editedByCol=新DataGridViewComboxColumn();
editedByCol.DataPropertyName=“EditedById”;
editedByCol.HeaderText=“编辑人”;
editedByCol.Name=“EditedById”;
editedByCol.DataSource=新绑定列表(usersForGrid);
editedByCol.DisplayMember=“Name”;
editedByCol.ValueMember=“Id”;
editedByCol.ReadOnly=true;
dgVuser.Columns.Add(editedByCol);
col=新的DataGridViewTextBoxColumn();
col.DataPropertyName=“已创建”;
col.HeaderText=“已创建”;
col.Name=“已创建”;
col.ReadOnly=true;
dgvuser.Columns.Add(col);
DataGridViewComboBoxColumn createdByCol=新建DataGridViewComboxColumn();
createdByCol.DataPropertyName=“CreatedById”;
createdByCol.HeaderText=“创建人”;
createdByCol.Name=“CreatedById”;
createdByCol.DataSource=新绑定列表(usersForGrid);
createdByCol.DisplayMember=“Name”;
createdByCol.ValueMember=“Id”;
createdByCol.ReadOnly=true;
dgvuser.Columns.Add(createdByCol);
}
私有void b保存单击(对象发送者,事件参数e)
{
使用(var dbContext=new datainfillentities())
{
foreach(usersForGrid中的变量行)
{
var dbItem=dbContext.Users.Where(x=>x.Id==row.Id).SingleOrDefault();
if(dbItem!=null)
{
if(dbItem.FirstName!=行.FirstName | | dbItem.LastName!=行.LastName | | dbItem.UserTypeId!=行.UserTypeId)
{
dbItem.FirstName=row.FirstName;
dbItem.LastName=row.LastName;
dbItem.UserTypeId=row.UserTypeId;
dbItem.Edited=DateTime.UtcNow;
dbItem.EditedById=1;
}
}
}
dbContext.SaveChanges();
}
GetData();
FillGrid();
}
}
公共类DataGridViewUserDTO
{
公共int Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串名称{get{return FirstName+“”+LastName;}}
公共字节UserTypeId{get;set;}
公共可空编辑{get;set;}
公共可空EditedById{get;set;}
已创建public System.DateTimeOffset{get;set;}
public int CreatedById{get;set;}
}
}
然后进行调试。您的代码是否输入了任何if()
块并实际更新了数据?是的。它甚至在GetData()中再次从数据库重新加载数据代码>和填充网格()代码>低于