アプリケーションに関して問題があり、EF を使用して更新する項目を選択していません。
ユーザーが組織の詳細を入力するためのアプリケーションを作成しています。十分に単純に思えます。タブ コントロールを使用してデータを入力すると、一連のデータ グリッドを含むビューが表示され、ユーザーは必要に応じて別のデータを更新または挿入したり、削除したりできます。
私のビューモデル内には、一連のさまざまなものがあります(MVVMを実装する最良の方法ではないかもしれませんが、最終的にそこに到達しようとしています)。
プロパティを実装していますINOTIFYPROPERTYCHANGE
。保存、更新、および削除するコマンド。そして、私のエンティティメソッド(Entity Frameworkを使用した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 の両方の式を使用してみましたが、どちらも機能していないようです。
申し訳ありませんが、これを読んで理解することがたくさんあり、必要に応じてコードや説明を追加していただければ幸いです :)。