1

Model First アプローチで、.NET 4.0 で実行されている EF5 に関する次の問題を見つけました: 次の自動生成エンティティがあります。

Partial Public Class Notice

    Private _id As Integer
    Public Property id As Integer
        Get
            Return _id
        End Get
        Friend Set(ByVal value As Integer)
            _id = value
        End Set
    End Property
    Public Property order_id As Integer
    Public Property employee_id As Integer
    Public Property sysdate As Datetime
    Public Property content As String

    Public Overridable Property order As Order
    Public Overridable Property employee As Employee

End Class

Notice エンティティは、Order エンティティおよび Employee エンティティと 1 (Order、Employee) 対多 (Notice) の関係で関連付けられます。

その後、Order エンティティは Employee エンティティとも関連付けられます。つまり、多数 (注文) 対 1 (従業員) の関係です。

次に、Notice エンティティと Employee エンティティの違反との関係により、次の単体テストが失敗すると予想します (notice1.employee ナビゲーション プロパティを割り当てません)。

<TestMethod()>
    <ExpectedException(GetType(DbUpdateException))>
    Public Sub ShouldNotAllowSaveNoticeWithoutAssignedEmployee()

        Dim notice1 = CreateNewNotice() ' returned entity has not set any relation
        notice1.order= CreateNewOrderWithAllRequiredAndRelatedEntities()

        DbContext.noticeSet.Add(notice1)
        DbContext.SaveChanges()

    End Sub

しかし、結果テストは合格です。データベースでは、Notice->employee_id の値は Order->employee_id の値と同じですが、これらの外部キーが異なる Employee オブジェクトを指している可能性があるため、予期されていません。私はnotice1.employeeナビゲーションプロパティを自分で設定する必要があると予想してDbUpdateExceptionいました.それを忘れると例外が発生したいと思います.

この奇妙な EF5 の動作の理由は何ですか?

アップデート:

CreateNewNotice()CreateNewOrderWithAllRequiredAndRelatedEntities()実装:

 Protected Function CreateNewNotice(Optional ByVal suffix As Int32 = 1) As Notice

        Dim notice1 = New Notice() With {
            .sysdate = DateTime.Now,
            .content = Description & suffix ' Description is constant, for testing purposes
        }

        Return notice1 

    End Function

Protected Function CreateNewOrderWithAllRequiredAndRelatedEntities(Optional ByVal suffix As Int32 = 1) As Order

        Dim order1 = CreateNewOrder(suffix) ' returned entity has not set any relation
        order1.employee = CreateNewEmployee(suffix)
        order1.customer = CreateNewCustomerWithAllRequiredRelatedEntities(suffix)
        order1.seller = CreateNewSeller(suffix)

        For i As Integer = 1 To 3
            order1.notices.Add(CreateNewNotice(i)) ' created notices have not initialized relations
        Next

        Return order1

    End Function
4

1 に答える 1