【发布时间】:2015-06-11 02:18:12
【问题描述】:
在带有实体框架 4.4 的 Windows 窗体 MDI 应用程序 .net 4.0 中,我有以下奇怪的行为:
在 MDI-Child-Form 中是一个 datagridview
数据绑定:
private void DGUser_gridBind()
{
_users = _frmmaster.DataAdmin.RepositoryAdmin.GetAll<User>();
DGUser.DataSource = _users;
}
绑定正在使用主表单的上下文。
我希望用户可以通过单击删除按钮或删除键来删除实体。
-
删除键
private void DGUser_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete) { if(DGUser.SelectedRows.Count==1) { User selectedUser = (User)DGUser.SelectedRows[0].DataBoundItem; deleteUser(selectedUser); } } } -
删除按钮
private void btDeleteUser_Click(object sender, EventArgs e) { if (DGUser.SelectedRows.Count == 1) { User selectedUser = (User)DGUser.SelectedRows[0].DataBoundItem; deleteUser(selectedUser); } } -
删除函数
private void deleteUser(User user) { _frmmaster.DataAdmin.RepositoryAdmin.Delete<User>(user); _frmmaster.DataAdmin.RepositoryAdmin.UnitOfWork.SaveChanges(); DGUser_gridBind(); }
当我通过单击删除按钮删除用户时,它按预期工作 但 当我使用 del 键删除用户时,所选实体将被删除,这很好,但 datagridview 中的第一个实体也将被删除(dgv 中的第一个实体仅在存储库中被删除,而不是在数据库中,选定的实体也将在数据库中删除)。当我在存储库的删除功能中设置断点时,它只会使用正确的实体激活一次。
我不知道为什么 dgv 中的第一个实体也被删除了。两个函数都使用相同的删除函数,但结果不同。谁能给我提示在哪里寻找我的错误。
【问题讨论】:
-
GetAll返回什么类型? -
它返回 IEnumerable
标签: c# winforms entity-framework datagridview