簡體   English   中英

實體框架獨立實體不相等

[英]Entity Framework Detached Entities Not Equal

我正在使用Entity Framework 6,我正在嘗試使用沒有更改跟蹤的實體。 所以我申請

MergeOption = MergeOption.NoTracking

在獲取我的實體之前到ObjectQuery。

在我的應用程序中,我有一個狀態下拉列表,狀態是實體。 Status下拉列表的ItemSource將設置為對象查詢返回的EntityCollection。

我有一個包含狀態的訂單實體。 如果我不更改MergeOption並使用默認值,我可以將SelectedValue設置為綁定到Order的狀態,它可以正常工作。 但是,如果我使用NoTracking,則不會在下拉列表中選擇適當的狀態。

有沒有辦法將分離的實體用作ItemSource並仍然正確綁定SelectedValue?

正如評論所述,您是通過參考進行比較; statusmyOrder.Status是兩個不同的對象。 如果從上下文中加載相同的實體兩次(但是來自相同的上下文實例),您將獲得相同的對象,這就是它們等價的原因。

您可以按主鍵或實體的每個屬性的值進行比較,具體取決於您希望等效於此實體的含義。

if( status.Id == myOrder.Status.Id )

if( status.FieldA == myOrder.Status.FieldA &&
    status.FieldB == myOrder.Status.FieldB )

在我在上面的評論中發布的這篇博客文章中 ,作者通過在模型中包含外鍵列來描述如何執行此操作。 有些人可能不希望他們的模型中包含外鍵列,所以這不適合他們(包括我自己),但我想發布一個答案,因為這將解決我上面描述的問題。

在XAML中,您只需使用這些行中的某些內容,以便ComboBox使用Order模型的Status_Id屬性與StatusCollection中狀態的Id屬性進行比較:

<ComboBox ItemsSource="{Binding StatusCollection}" 
  DisplayMemberPath="Name" 
  SelectedValuePath="Id" 
  SelectedValue="{Binding MyOrder.Status_Id,Mode=TwoWay}" 
/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM