MySQL + Entity Framework: не удается удалить объект - PullRequest
2 голосов
/ 23 августа 2011

Я пытаюсь удалить объект, который имеет отношения внешнего ключа через Entity Framework (MySQL / Connector).

ClientAccount >>> ClientEmailAddresses

  foreach (ClientAccount client in recsClientStore.Deleted) {   
        ClientAccount stub = new ClientAccount();
        stub.Id = client.Id;
        this.DBContext.AttachTo("ClientAccounts", stub);


        stub.FkClientEmailAddresses.Clear();
        this.DBContext.DeleteObject(stub);
    }

    this.DBContext.SaveChanges();

.. но при этом я получаю следующую ошибку:

Операцияfail: отношение не может быть изменено, так как одно или несколько свойств внешнего ключа не могут иметь значение null.Когда в отношение вносится изменение, для соответствующего свойства внешнего ключа устанавливается нулевое значение.Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, свойству внешнего ключа должно быть назначено другое ненулевое значение или несвязанный объект должен быть удален.

IЯ не совсем уверен, где это оставляет меня.Нужно ли сначала удалять объект EmailAddress?Мы опасаемся включать каскад, но все больше и больше похоже на то, что это необходимо для очистки внешних ключей.

1 Ответ

2 голосов
/ 23 августа 2011

Проблема в том, что это:

stub.FkClientEmailAddresses.Clear();

не удаляет отношения.Он только устанавливает FK в связанных объектах на ноль.Если вы хотите, чтобы они действительно удалились, вы должны либо:

  • удалить их, вызвав Remove на их наборе объектов
  • изменить отношение на идентифицирующее отношение - это будетзаставить Clear работать как положено
  • Правильно настроить каскадное удаление как в EDMX, так и в базе данных и вообще не вызывать очистку
...