我的应用程序存在问题,并且没有选择要使用 EF 更新的项目。
我正在为用户创建一个应用程序以输入他们的组织详细信息。看起来很简单。使用选项卡控件输入数据后,我有一个包含一系列数据网格的视图,使用户能够更新或插入另一条数据(如果需要)或能够删除。
在我的视图模型中,我有一系列不同的东西(这可能不是实现 MVVM 的最佳方式,但最终会尝试实现)。
我有我的属性实现INOTIFYPROPERTYCHANGE
。保存、更新和删除的命令。还有我的实体方法(使用实体框架的 CRUD 操作 - 稍后当我了解有关 MVVM 等的更多信息时将使用存储库系统)。
到目前为止,我不得不使用视图的代码隐藏来加载我的数据,这些数据可以完美地工作(显然我不应该这样做,所以任何向我展示的建议将不胜感激)就像这样;
private void Page_Loaded(object sender, RoutedEventArgs e)
{
DBEntities context = new DBEntities();
var orgTypeDetails = (from o in context.OrganisationTypeDetails
select o).ToList();
dgOrgTypeDetail.ItemsSource = orgTypeDetails;
}
我还有一个事件处理程序,它只允许您选择一行然后更新该特定行;
private void btnUpdateOrgTypeDetail_Click(object sender, RoutedEventArgs e)
{
OrganisationTypeDetailViewModel org = new OrganisationTypeDetailViewModel();
OrganisationTypeDetail selected = dgOrgTypeDetail.SelectedItem as OrganisationTypeDetail;
if (selected == null)
MessageBox.Show("You must select a 'Type' before updating.");
else
{
OrganisationTypeDetailUpdateView update = new OrganisationTypeDetailUpdateView();
update.ShowDialog();
org.UpdateOrganisationTypeDetail(selected);
Page_Loaded(null, null);
}
}
最后,我的方法使用 View-Model 中的 EF 更新表;
public void UpdateOrganisationTypeDetail(OrganisationTypeDetail orgTypeDetail)
{
using (DBEntities context = new DBEntities())
{
//var orgTD = context.OrganisationTypeDetails.Where(otd => otd.OrganisationTypeDetailID == OrganisationTypeDetailID).FirstOrDefault();
var orgTD = (from a in context.OrganisationTypeDetails
where a.OrganisationTypeDetailID == OrganisationTypeDetailID
select a).FirstOrDefault();
orgTD.OrganisationTypeDetailID = OrganisationTypeDetailID;
orgTD.OrganisationTypeID = OrganisationTypeID;
orgTD.Title = Title;
orgTD.FirstName = FirstName;
orgTD.Surname = Surname;
orgTD.Position = Position;
orgTD.DateOfBirth = DateOfBirth;
orgTD.Address = Address;
orgTD.Country = Country;
orgTD.Postcode = Postcode;
orgTD.PhoneNumber = PhoneNumber;
orgTD.MobileNumber = MobileNumber;
orgTD.FaxNumber = FaxNumber;
orgTD.Email = Email;
orgTD.NINumber = NINumber;
context.OrganisationTypeDetails.ApplyCurrentValues(orgTD);
context.SaveChanges();
MessageBox.Show("Updated Organisation Type Details");
}
执行此应用程序时,它会生成一个Null Reference exception
.
在我的属性中,为了确保它不会崩溃,我必须以编程方式设置 ID;
public int _OrganisationTypeDetailID=17;
但是我希望能够根据自己的选择选择一行,而不是只能选择从 17 中获取该行。
我尝试过使用 Linq 和 Lamba 表达式,但似乎都不起作用。
很抱歉,如果阅读本文有很多内容需要了解,并且如果需要,我很乐意添加更多代码或解释:)。