Я делаю веб-приложение MVC3, используя Entity Framework 4.1. Проблема в том, что у меня есть циклическая ссылка, и я получаю исключение. Я понимаю, почему это неправильно, поэтому я хотел бы удалить ON DELETE / UPDATE CASCADE из моих отношений «многие ко многим». Проблема в том, что я не знаю, как это сделать ...
Это было бы для описания моей проблемы. Вот моя модель:
Вопросы -> -.
| |
| |
/ | \ |
Поля |
| |
| |
/ | \ |
Ответы ----- '
Каждый вопрос имеет несколько полей, а каждое поле имеет несколько ответов Когда я удаляю вопрос или ответ, я хочу удалить соответствующие ответы. Я думаю, что никакой дополнительной работы здесь не нужно делать. Однако у каждого ответа может быть несколько зависимых вопросов (каждый вопрос может зависеть от многих ответов). Это отношение используется для отображения вопроса, только если ответ на какой-либо другой вопрос был ДА, например ...
Теперь, если я удалю ответ, я не хочу удалять все вопросы, которые зависят от него, а только удалить зависимость.
В моей модели объект Вопрос имеет:
' VB
Public Overridable Property AnswerDependencies As List(Of QuestionAnswer)
// C#
public virtual List < QuestionAnswer > AnswerDependencies { get; set; }
и объект QuestionAnswer имеет:
' VB
Public Overridable Property DependentQuestions As List(Of Question)
// C#
public virtual List < Question > DependentQuestions { get; set; }
Как определить ожидаемое поведение в событии OnModelCreating в моем классе DataContext, который имеет следующие свойства:
Public Property Questions As DbSet(Of Question)
Public Property QuestionFields As DbSet(Of QuestionField)
Public Property QuestionAnswers As DbSet(Of QuestionAnswer)
EDIT
Я нашел решение своей проблемы! Я вручную создал объект QuestionAnswerDependency, который выглядит следующим образом:
Public Class QuestionAnswerDependency
Inherits ModelBase
Public Property QuestionId As Integer?
Public Overridable Property Question As Question
Public Property AnswerId As Integer
Public Overridable Property Answer As QuestionAnswer
Sub New(ByRef q As Question, ByRef a As QuestionAnswer)
Me.New()
Me.Question = q
Me.Answer = a
End Sub
Sub New()
End Sub
End Class
Я сделал свойство QuestionId обнуляемым, что приводит к отсутствию CASCADE ON DELETE и разрешает циклическую ссылку. Теперь у объектов Question и QuestionAnswer есть список объектов QuestionAnswerDependency:
Public Overridable Property QuestionAnswerDependencies As List(Of QuestionAnswerDependency)
Я думаю, что EF не может автоматически делать то, что я хочу, но дайте мне знать, если у вас есть идея, как этого достичь, не создавая промежуточный объект.