Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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
C# 使用实体框架更新数据库时引发空引用异常_C#_Wpf_Entity Framework_Data Binding - Fatal编程技术网

C# 使用实体框架更新数据库时引发空引用异常

C# 使用实体框架更新数据库时引发空引用异常,c#,wpf,entity-framework,data-binding,C#,Wpf,Entity Framework,Data Binding,我正在使用实体框架为组织创建一个桌面应用程序,将其数据输入数据库以显示其记录 我已经使用一个数据模板创建了一个选项卡控件,该模板已经过验证,使它们能够保存所需的字段,目前为止效果良好 我在一个页面上使用了一系列不同的数据网格来显示添加的细节。在该页面中,它包含一系列不同的命令,允许用户添加、更新或删除内容(取决于表格,仅允许用户更新) 但这正是我脱臼的地方。到目前为止,add和delete方法工作得很好,但是当涉及到更新表时,它抛出了一个Null引用异常 下面是一些代码片段;视图模型: xaml

我正在使用实体框架为组织创建一个桌面应用程序,将其数据输入数据库以显示其记录

我已经使用一个
数据模板创建了一个
选项卡控件
,该模板已经过验证,使它们能够保存所需的字段,目前为止效果良好

我在一个页面上使用了一系列不同的数据网格来显示添加的细节。在该页面中,它包含一系列不同的
命令
,允许用户添加、更新或删除内容(取决于表格,仅允许用户更新)

但这正是我脱臼的地方。到目前为止,add和delete方法工作得很好,但是当涉及到更新表时,它抛出了一个
Null引用异常

下面是一些代码片段;视图模型:

xaml

首先,当用户从数据网格中选择一行时,我希望更新该特定行。我已经将视图模型中的属性绑定到xaml中的文本字段,以便它传递到视图模型。我还尝试在视图模型中硬编码ID属性<代码>公共int_EmployeeID=11; 公共国际组织ID=4
但这仍然会引发
空引用异常

有人能帮我解决这个问题吗?我一直在尝试各种不同的方法,但仍然没有用。我是WPF的新手,正在尝试实现MVVM,很明显,它并不完全是MVVM,但我正在缓慢但肯定地学习实现它的正确方法。 干杯

添加行:

emp = new Employee();

否则,您将为空变量赋值。

在我的代码隐藏中,我已将
文本框
映射到EF中的
实体
(我知道这是实现
MVVM
的不正确方法,但在我仍在学习的过程中,这将被更改

基本上,我是将所有
文本框
分配给项目,而不是分配ID。因此它不允许我更新,因为它无法识别表中要更新的项目,因为没有分配ID

就这样,

txtID.Text = type.OrganisationTypeDetailID.ToString();

很抱歉,Michael,我不同意你的观点,但这只是意味着如果没有指定id的员工,你就要添加一个新员工,这应该只是抛出一个异常,因为它是一个更新方法,而不是SaveOrUpdate方法。Gregory,如果可能的话,你还应该清理一下代码,因为有很多错误nch是一组您使用但不使用的变量,以及创建给您已有的事物赋予新含义的对象(var emp=new EmployeeViewModel();而不是正确使用DataContext并将其转换为正确的对象类型)。谢谢您的回复。我已经尝试过了,但它似乎仍然返回
MessageBox.show(“无法选择项目”)
谢谢你的回复@Raposo,显然这不是最后一段代码。我一直在尝试做不同的事情来让它工作,我是wpf和C的新手,所以我边走边学习。顺便问一下,Gregory,你看过MVVM Light吗()?它帮助您实现MVVM模式,您可以将其作为NuGet软件包添加到应用程序中。@Raposo是的,我已经了解了MVVM light,但目前,我只想将实现此功能作为主要关注点之一。我只是想在尝试扩展之前更好地了解WPf的工作原理一下子使我脑子里塞满了太多的知识。
            IsSynchronizedWithCurrentItem="False"
            ItemsSource="{Binding LoadEmployee}"
            SelectedItem="{Binding SelectEmployee}" Grid.RowSpan="2">
if (emp == null)
 {
emp = new Employee();
txtID.Text = type.OrganisationTypeDetailID.ToString();