1

私は次のエンティティを持っています:

Partial Public Class Workflow
    Sub New()
        Activities = New List(Of WFActivity)
    End Sub
    <Key()>
    Public Property ID As Long
    Public Property Customer As Customer
    <Required(), MaxLength(100)>
    Public Property Name As String
    Public Property Activities As List(Of WFActivity)
End Class

エンティティを追加および更新するには、次の手順を使用します。

Public Sub SaveWorkflow(ByVal WF As Workflow)
    Dim wfa As WFActivity
    Try
        Using ctx = New MyContext

            ctx.Workflow.Add(WF)
            If WF.ID > 0 Then
                ctx.Entry(WF).State = EntityState.Modified
            End If

            For Each wfa In WF.Activities
                If wfa.ID > 0 Then
                    ctx.Entry(wfa).State = EntityState.Modified
                End If
            Next

            If WF.Customer.ID > 0 Then
                ctx.Entry(WF.Customer).State = EntityState.Modified
            End If

            ctx.SaveChanges()
        End Using


    Catch ex As Exception

    End Try
End Function

新しいエンティティの挿入は正常に機能します。しかし、この手順で更新目的で同じ WF オブジェクトを 2 回使用すると、次のエラーが発生しました。

リレーションシップの外部キー プロパティを公開しないエンティティの保存中にエラーが発生しました。単一のエンティティを例外のソースとして識別できないため、EntityEntries プロパティは null を返します。保存中の例外の処理は、エンティティ タイプで外部キー プロパティを公開することで簡単に行うことができます。詳細については、InnerException を参照してください。

バグはどこですか?

4

1 に答える 1

0

これは私に一度起こりました。EFが要求するキーを公開するだけで解決したと思います(キーを公開すると、参照を保持するエンティティにも外部キーを含むプロパティがあることを意味します)例:

public class Holder
{
    public Held HeldObject{get;set;}
    public int HeldID //this is the primary key for the entity Held (exact same name)
}

これにより、DB に FK 制限が作成されます

于 2012-11-13T17:07:20.860 に答える