メンバーを更新するときに、彼のBankCheckも更新したいと思います。Entity Framework 5:foreignKeyを持つ1対多の更新/追加/削除
これは私のデータベースです:
- 私bankCheckは、追加、更新、または削除することができます。
- 私のメンバーは、私は私のデータグリッドの私のメンバーを選択し、[編集]を選択し、私のWPFアプリケーションスイッチ、他のページにし、テキストボックスなどで、私のメンバーを表示するだけで(名前、姓...)
更新することができます
私のボタンをクリックすると、彼の銀行のチェックを追加/編集/削除することができます。最初の銀行チェックを編集することができます。
最後のbankCheckを削除し、他の(たとえば)を追加します。
私は[OK]を押して、 "私の編集を有効にする"をクリックします。
私のプログラムの彼のbankCheckで新しいメンバーを再作成し、私はこの作られた:
private void EditMember(Member updatedMember)
{
try
{
using (var context = new KravMagaEntities())
{
context.Member.Attach(updatedMember);
context.Entry(updatedMember).State = EntityState.Modified;
context.SaveChanges();
}
ResetAllControls();
States.EnumToText(States.StatesEnum.UpdatingSuccess);
Application.Current.Dispatcher.Invoke(() =>
{
_managementService.IsVisibleAddTab(true);
_managementService.IsVisibleEditTab(false);
});
}
catch (Exception exception)
{
States.EnumToText(States.StatesEnum.Error, exception);
}
}
をしかし、私はこのエラーを持っている:
A referential integrity constraint violation occurred: The property values that define the referential constraints are not consistent between principal and dependent objects in the relationship.
私はこの問題を解決することができますかわかりませんエラー。
ありがとうございます。
マイコード:私が見るように
private void OnEditMemberBtnClicked(object sender, RoutedEventArgs e)
{
try
{
var isValidateCertificat = IsValidDate(BirthDateTxt);
var isValidateBirth = IsValidDate(CertificateDateTxt);
var isValidateAutorisation = IsValidDate(AutorizationDateTxt);
var isValidateReglement = IsValidDate(RuleDateTxt);
if (isValidateBirth && isValidateCertificat && isValidateAutorisation && isValidateReglement)
{
States.EnumToText(States.StatesEnum.Updating);
var typePaiement = BankCheckRadio.IsChecked.Value;
var typePaiementText = typePaiement ? "Chèque" : "Espèce";
var doctor = "";
var dateCertificate = "";
if (BankCheckRadio.IsChecked.Value)
{
doctor = DoctorTxt.Text;
dateCertificate = CertificateDateTxt.Text;
}
var editedMember = new Member
{
id_Member = _idForEdit,
name_Member = UppercaseChar(NameTxt.Text),
surname_Member = UppercaseChar(SurnameTxt.Text),
birthDate_Member = BirthDateTxt.Text,
autorizationDate_Member = AutorizationDateTxt.Text,
address_Member = UppercaseChar(AddressTxt.Text),
postalCode_Member = PostalCodeTxt.Text,
country_Member = UppercaseChar(CountryTxt.Text),
fixPhone_Member = FixPhoneTxt.Text,
mobilePhone_Member = MobilePhoneTxt.Text,
mail_Member = MailTxt.Text,
beginDate_Member = BeginDateCombo.Text,
ruleDate_Member = RuleDateTxt.Text,
subscription_Member = SubscriptionCombo.Text,
typePaiement_Member = typePaiement,
typePaiementText_Member = typePaiementText,
federationNumero_Member = FederationNumeroTxt.Text.ToUpper(),
level_Member = LevelCombo.Text,
certificate_Member = CertificateCheckbox.IsChecked.Value,
doctor_Member = UppercaseChar(doctor),
certificateDate_Member = dateCertificate,
problem_Member = UppercaseChar(ProblemTxt.Text, true),
emergencyName_Member = UppercaseChar(EmergencyNameTxt.Text),
emergencyPhone_Member = EmergencyPhoneTxt.Text,
BankCheck = _bankChecks
};
if (_bankChecks != null)
{
using (var context = new KravMagaEntities())
{
foreach (var bankCheck in _bankChecks)
{
bankCheck.idMember_BankCheck = editedMember.id_Member;
context.Entry(bankCheck).State = EntityState.Added;
}
context.SaveChanges();
}
}
new Task(() => EditMember(editedMember)).Start();
}
}
catch (Exception exception)
{
States.EnumToText(States.StatesEnum.Error, exception);
}
}
はい私はすでにこれらのリンクを見つけました...そして、それは私がしたことです。 – Naografix
あなたはそこに言及したすべてを試しましたが、それはあなたを助けませんでしたか?あなたの説明から、あなたの問題とこれらのリンクで言及された問題との間に重大な違いはありません。私は完全なコードが表示されないので、あなたは何が違いであるかを調査し、それらの例と同じように動作させることができるかもしれないより多くの情報を持っているかもしれません。 –
また、両方のエンティティを変更したものとしてマークすることを確認します(顧客のナビゲーションプロパティを更新するときに、適切なBankCheckも更新する必要があります)。このリンクを確認してください:http://stackoverflow.com/a/16128818/3731444 –