связь не может быть изменена, поскольку одно или несколько свойств внешнего ключа не обнуляются

#c# #entity-framework #foreign-keys #try-catch #dbcontext

#c# #entity-framework #внешние ключи #попробуйте-catch #dbcontext

Вопрос:

у меня есть gridview .это представление сетки содержит много записей (информация об элементе) .

    try
            {
                Member member=new Member();
                IdMember = int.Parse(gvListCompany.SelectedRows[0].Cells[0].Value.ToString());


                member = objMemberRepository.FindBy(i => i.Id == IdMember).First();
                objMemberRepository.Delete(member);
                objMemberRepository.Save();


                toolStripStatusLabelLine.Visible = true;
                lblState.Text = "delete is successfully";
                StatusMain.BackColor = Color.Green;

                gvListCompany.DataSource = objMemberRepository.FindBy(i => i.IsSupporter == typeofmember).ToList();
            }
            catch
            {
                toolStripStatusLabelLine.Visible = true;
                lblState.Text = "couldn't delete because of subset records";
                StatusMain.BackColor = ColorTranslator.FromHtml("#ea0000");
                return;

            }
  

Вот код для удаления элемента представления таблицы . Предположим, я хочу удалить запись, которая имеет FK item в другой таблице, поэтому записи не могут быть удалены, а оператор try выдает исключение, и я показываю соответствующее error пользователю, как this record has an subset please delete the subset после этой операции, если я попытаюсь удалить запись, которой нет FK в другой таблице, я получу ту же ошибку, и я не могу ее удалить, но на самом деле я должен иметь возможность удалить, потому что в моей записи ее нет FK записи в другой таблице .

Сообщение об ошибке

 The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
  

Класс-член:

    public partial class Member
    {
        public Member()
        {
            this.Inovices = new HashSet<Inovice>();
        }
        public int Id { get; set; }
        public string Type { get; set; }
        public string Name { get; set; 
        public string EconomicCompnayNumber { get; set; }
        public string IntNumber { get; set; }
        public string Province { get; set; }
        public string City { get; set; }
        public string PostCode { get; set; }
        public string Address { get; set; }
        public string PhoneNumber { get; set; }
        public string Region { get; set; }
        public string IsSupporter { get; set; }

        public virtual ICollection<Inovice> Inovices { get; set; }
        public virtual ICollection<Cash> Cashes { get; set; }
}
  

Я изменил свой код на это, и это работает, но я действительно не знаю, почему?

     MemberRepository aa = new MemberRepository();

    Member member=new Member();
        IdMember = int.Parse(gvListCompany.SelectedRows[0].Cells[0].Value.ToString());

        Name = gvListCompany.SelectedRows[0].Cells[2].Value.ToString();
        member = aa.FindBy(i => i.Id == IdMember).First();
    try
    {


        aa.Delete(member);
        aa.Save();


        toolStripStatusLabelLine.Visible = true;
        lblState.Text = "شرکت  "   Name   " با موفقیت حذف شد ";
        StatusMain.BackColor = Color.Green;

        gvListCompany.DataSource = aa.FindBy(i => i.IsSupporter == typeofmember).ToList();
    }
    catch
    {
        toolStripStatusLabelLine.Visible = true;
        lblState.Text = "برای '"   Name   "' در سیستم فاکتور ثبت شده است ";
        StatusMain.BackColor = ColorTranslator.FromHtml("#ea0000");
        return;

    }
  

Я думаю, это из-за dbcontext .

С наилучшими пожеланиями

Комментарии:

1. Ваша попытка / перехват довольно усердны. ВСЕ, что пойдет не так внутри этого блока try, сообщит о сбое с «не удалось удалить из-за записей подмножества». Пусть генерируется исключение (внутри catch просто поместите «throw;» в строку), чтобы вы могли видеть, в чем заключается реальная проблема.

2. Не могли бы вы, пожалуйста, сказать мне, куда именно следует поместить оператор throw ?

3. Внутри блока catch{}. В идеале, ваш оператор try{} должен содержать только . Методы Delete() и .Save(), так что область действия вашего catch{} будет ограничена кодом, который вы на самом деле пытаетесь перехватить. catch { throw; // … } Похоже, что это не та проблема, с которой вы столкнулись на самом деле (на основе вашего обновления с фактической ошибкой), но я бы все равно рекомендовал это.

4. Я ввел метод сохранения и удаления в инструкцию try, но та же ошибка

5. Моя проблема решается путем вставки класса репозитория внутри try / catch , я имею в виду, что я создаю новый репозиторий, и это работает, но почему?? MemberRepository aa = новый MemberRepository();