Я использую 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
Не приятно, но работает.