Entity Framework 4.1을 사용하여 MVC3 웹 응용 프로그램을 만들고 있습니다. 문제는 순환 참조가 있고 예외가 발생한다는 것입니다. 나는 왜 그것이 잘못되었으므로 DELETE/UPDATE CASCADE를 다 대 다 관계에서 제거하고 싶습니다. 문제는 그걸하는 법을 모른다는 것입니다 ... 그건 내 문제에 대한 설명이 될 것입니다. 여기에 내 모델 간다 :Entity Framework 4.1에서 CASCADE없이 다 대다 관계를 만드는 방법은 무엇입니까?
질문 -> -.
| |
| |
/| \ |
필드 |
| |
| |
/| \ |
답변 ----- '
모든 질문에는 여러 개의 입력란이 있으며 모든 입력란에 여러 개의 답변이 있습니다. 질문이나 답변을 삭제할 때 해당 답변을 삭제하고 싶습니다. 나는 여기서 추가적인 일을 할 필요가 없다고 생각한다. 그러나 각 대답에는 여러 종속 질문이있을 수 있습니다. 모든 질문은 여러 답변에 따라 달라질 수 있습니다. 이 관계는 예를 들어 다른 질문에 대한 대답이 예일 경우에만 질문을 표시하는 데 사용됩니다 ... 이제 응답을 제거하면 종속 된 모든 질문을 제거하지 않고 종속성 만 제거합니다.
' VB
Public Overridable Property AnswerDependencies As List(Of QuestionAnswer)
// C#
public virtual List <QuestionAnswer> AnswerDependencies { get; set; }
및 QuestionAnswer 객체가 있습니다 : 내 모델 질문 객체에서
가 가지고있는 다음과 같은 속성이 있습니다 내의 DataContext 클래스에서 OnModelCreating 이벤트에 예상되는 동작을 정의하는 방법
' VB
Public Overridable Property DependentQuestions As List(Of Question)
// C#
public virtual List <Question> DependentQuestions { get; set; }
:
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
나는 아무 CASCADE ON DELETE 결과와 순환 참조를 해결 QuestionId 속성 Null을 허용했다. 이제 질문 및 QuestionAnswer 객체는 QuestionAnswerDependency 객체의 목록이 : 나는 EF가 자동으로 내가 원하는 것을 할 수 없다고 생각
Public Overridable Property QuestionAnswerDependencies As List(Of QuestionAnswerDependency)
,하지만 당신은에서 사이 "작성하지 않고 그것을 달성하는 방법에 대한 아이디어가 있으면 알려 주시기 -목적".