Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms DbContext.SaveChanges()不将更改保存到数据库_Winforms_Entity Framework_Entity Framework 6 - Fatal编程技术网

Winforms 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

DbContext.SaveChanges()不会将更改保存到数据库,而是更新网格。不按我所希望的方式工作的方法是在
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()中再次从数据库重新加载数据
填充网格()低于