2013-02-10 21 views
0

我有一個WPF 4應用程序,其中通過自追蹤實體(STE 5)訪問我的數據。我有一個WPF內容控件,其數據上下文設置爲STE的模型類(供應商)。供應商類別的導航屬性爲vendor_accounts。我可以成功獲取這些供應商帳戶的集合,並將它們綁定到內容控件中的列表視圖。但是,當我嘗試將新的vendor_account對象添加到集合時,出現以下錯誤我不能使用導航屬性將項目添加到自追蹤實體集合

在CollectionChanged事件期間無法更改ObservableCollection。

這裏是我使用添加到ListView的集合簡化vb.NET代碼:

Private Sub AddAccountExecute() 

    Dim newAcc As New vendor_account With {.chrAccName = "New Account Name", .chrAccNumber = "New #"} 

    VendorSelection.vendor_account.Add(newAcc) 
    ''FTC_Context is the object context for the STE data access model 
    FTC_Context.SaveChanges() 

End Sub 

此錯誤是在下面的子這是對生成的模板代碼拋出STE。上線會出現錯誤previousValue.vendor_account.Remove(ME)

Private Sub Fixupvendor(ByVal previousValue As vendor) 
    If IsDeserializing Then 
     Return 
    End If 

    If previousValue IsNot Nothing AndAlso previousValue.vendor_account.Contains(Me) Then 
     previousValue.vendor_account.Remove(Me) 
    End If 

    If vendor IsNot Nothing Then 
     vendor.vendor_account.Add(Me) 

     idVendor = vendor.idVendor 
    End If 
    If ChangeTracker.ChangeTrackingEnabled Then 
     If ChangeTracker.OriginalValues.ContainsKey("vendor") AndAlso 
      ChangeTracker.OriginalValues("vendor") Is vendor Then 
      ChangeTracker.OriginalValues.Remove("vendor") 
     Else 
      ChangeTracker.RecordOriginalValue("vendor", previousValue) 
     End If 
     If vendor IsNot Nothing AndAlso Not vendor.ChangeTracker.ChangeTrackingEnabled Then 
      vendor.StartTracking() 
     End If 
    End If 
End Sub 

我註釋掉線和項目可以成功添加到收藏account_vendor(這是不是一個可以接受的修復,因爲它修改每次更新我的STE模型時自動生成的代碼都會重新創建)。
所以我在FTC_Contect.SaveChanges()中添加了上面的代碼行,用於測試數據庫是否被更新。但是現在在保存更改行時出現以下錯誤:

違反了多重性約束。關係「FTC_devModel.FK_vendor_account_vendor」的角色「供應商」具有多重性 1或0..1。

我是STE新手,並且遇到麻煩。

所以,我的問題是,有人可以通過提供一個示例來說明如何使用「導航屬性」添加/刪除記錄或幫助我更正上面的代碼。

在此先感謝

回答

0

所以我有一個工作「解決方案」現在。也許黑客是一個更好的術語。

我改變了STE實體框架模板(FTCModel.tt)排除的行: previousValue.vendor_account.Remove(ME)

和我改變addAccountExecute子代碼:

Dim vendorAccount As New vendor_account With {.idVendor = idVendor, 
                   .chrAccName = "New Account Name", 
                   .chrAccNumber = "New #"} 
FTC_Context.vendor_account.AddObject(vendorAccount) 
FTC_Context.SaveChanges() 

它使用STE上下文添加對象,而不是像我在第一個代碼中提供的那樣添加供應商對象。

所以這是工作,但這感覺像一個黑客,就像我仍然做錯了什麼。 fixup方法是從vendor_account類的「vendor」setter屬性中調用的,它試圖刪除然後添加vendor_account對象到供應商,然後拋出我在第一篇文章中列出的錯誤。

我還是不明白爲什麼我在第一個地方得到了錯誤。也許它與WPF綁定ListView直接導航屬性(類型trackablecollection(of T))有關。

現在我會用這個,但是如果有人能夠幫助我更好地理解這個問題,我會非常感激。

相關問題