Lorsque je mets à jour mon membre, je veux aussi mettre à jour son BankCheck.Entity Framework 5: Un à plusieurs avec foreignKey Mis à jour/Ajouté/Supprimé
C'est ma base de données:
- Mon bankCheck peut être ajouté, mis à jour ou supprimé.
- Mon membre peut être mis à jour que (nom, prénom ...)
Je choisis mon membre dans mon DataGrid et sélectionnez Modifier, mon WPF commutateur d'application à une autre page, et afficher mon membre avec Textbox etc Je clique sur mon bouton pour ajouter/modifier/supprimer son bankCheck et je peux éditer le premier bankCheck.
Je supprime le dernier bankCheck et j'en ajoute un autre (par exemple).
J'appuie sur OK et je clique sur "Valid my Edit".
Mon programme re-crée un nouveau membre avec son bankCheck et je fait ceci:
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);
}
}
Mais je cette erreur:
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.
Je ne sais pas comment je peux résoudre ce problème Erreur.
Merci.
Mon code:
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);
}
}
Oui j'ai déjà trouvé ces liens ... Et c'est ce que j'ai fait. – Naografix
Alors avez-vous essayé tout ce qui est mentionné ici et cela ne vous a pas aidé? De votre description, je ne vois aucune différence critique entre votre problème et les problèmes mentionnés sur ces liens. Je ne vois pas le code complet alors que vous avez plus d'informations vous pourriez être en mesure d'étudier quelles sont les différences et essayer de faire fonctionner le même que dans ces exemples. –
Vérifiez également que vous marquez les entités comme modifiées sur les deux côtés (lorsque vous mettez à jour une propriété de navigation pour le client, vous devez également mettre à jour un BankCheck approprié). Cliquez sur ce lien: http://stackoverflow.com/a/16128818/3731444 –