Ошибка при удалении Object + Отношение Один ко Многим + Linq to Sql - PullRequest
1 голос
/ 26 ноября 2011

Это Моя программа

Отношения между объектом и объектом SectionObject - один ко многим, а связь между двумя таблицами основана на ObjectId.

first: set obj

private void ObjectAdd(...)
{
    obj = new Object(); //is Public
    obj = Shop.Objects.SingleOrDefault(S => S.IdObject == SelectedObjectId);
}

secound: добавить sectionObject в obj

private void BtnAddCategory(...)
{
    SectionObject SO = new SectionObject();
                SO.Section = Shop.Sections.SingleOrDefault(Sections => Sections.SectionId == FrmCategoryList.SelectedSectionId);

    obj.SectionObjects.Add(SO);
}

three: удалить SectionObject of obj

private void BtnDelCategory(...)
{
    SectionObject SO = new SectionObject();
              SO = obj.SectionObjects.SingleOrDefault(Sections => Sections.SectionId == Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value));

    obj.SectionObjects.Remove(SO);
}

final: вставить obj в базу данных

private void BtnAccept(...)
{
    Shop.Objects.InsertOnSubmit(obj);
    Shop.SubmitChanges(); // ERROR
}

ERROR is:

System.InvalidOperationException was caught
  Message=An attempt was made to remove a relationship between a Object and a SectionObject. However, one of the relationship's foreign keys (SectionObject.ObjectId) cannot be set to null.
  Source=System.Data.Linq
  StackTrace:
       at System.Data.Linq.ChangeTracker.StandardChangeTracker.StandardTrackedObject.SynchDependentData()
       at System.Data.Linq.ChangeProcessor.ValidateAll(IEnumerable`1 list)
       at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
       at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
       at WindowsFormsApplication1.ObjectAdd.BtnAccept_Click(Object sender, EventArgs e) in C:\Users\EasySoft\Documents\Visual Studio 2010\Projects\Shop 90.08.22\Shop10.4\Shop\ObjectAdd.cs:line 47
  InnerException: 

1 Ответ

0 голосов
/ 26 ноября 2011

Когда вы создаете объект section для объекта, вам необходимо установить его свойство sectionobject.objectid. Если вы внесете изменения сразу после добавления, вы получите ту же ошибку. Это говорит о том, что у вас есть объект section без внешнего ключа к объекту

...