Удаление отношения 1-ко-многим между объектами требует удаления с обеих сторон - PullRequest
0 голосов
/ 19 июля 2011

Я использую Code First EF.У меня есть следующий код в моем проекте

If String.IsNullOrEmpty(ddlProductionLocation.SelectedValue) Then
    CurrentUser.ProductionLocation = Nothing
Else
    CurrentUser.ProductionLocation = ProductionLocationRepository.Find(DataContext, Integer.Parse(ddlProductionLocation.SelectedValue))
End If

ddlProductionLocation - просто выпадающий список, CurrentUser - простой объект EF, ProductionLocationRepository - скучный класс, который косвенно предоставляет мне доступ к базе данных (также возвращает простой объект EF).

Пользователь и ProductionLocation имеют отношение 1 к n.

Это не сработало правильно для удаления отношения, так как после установки ProductionLocation в ноль, оно все равно содержало исходное значение.В некоторых случаях это работало случайным образом (во время отладки и т. Д.).

Исходя из того, что я понял, эта проблема является второй частью отношений.Я изменил код на это:

If String.IsNullOrEmpty(ddlProductionLocation.SelectedValue) Then
    If CurrentUser.ProductionLocation IsNot Nothing Then
        CurrentUser.ProductionLocation.Users.Remove(CurrentUser)
    End If
    CurrentUser.ProductionLocation = Nothing
Else
    CurrentUser.ProductionLocation = ProductionLocationRepository.Find(DataContext, Integer.Parse(ddlProductionLocation.SelectedValue))
End If

МОЙ ВОПРОС: Это работает, но я считаю, что это не правильное решение.Либо это?Или мне действительно нужно удалить обе стороны отношений во всех случаях?

Такс

РЕДАКТИРОВАТЬ: Окончательное решение:

If String.IsNullOrEmpty(ddlProductionLocation.SelectedValue) Then
    Dim pl = CurrentUser.ProductionLocation 'HACK for loading Product Location before setting it
    CurrentUser.ProductionLocation = Nothing
Else
    CurrentUser.ProductionLocation = ProductionLocationRepository.Find(DataContext, Integer.Parse(ddlProductionLocation.SelectedValue))
End If

Не приятно, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...