[英]Entity Framework Detached Entities Not Equal
我正在使用Entity Framework 6,我正在嘗試使用沒有更改跟蹤的實體。 所以我申請
MergeOption = MergeOption.NoTracking
在獲取我的實體之前到ObjectQuery。
在我的應用程序中,我有一個狀態下拉列表,狀態是實體。 Status下拉列表的ItemSource將設置為對象查詢返回的EntityCollection。
我有一個包含狀態的訂單實體。 如果我不更改MergeOption並使用默認值,我可以將SelectedValue設置為綁定到Order的狀態,它可以正常工作。 但是,如果我使用NoTracking,則不會在下拉列表中選擇適當的狀態。
有沒有辦法將分離的實體用作ItemSource並仍然正確綁定SelectedValue?
正如評論所述,您是通過參考進行比較; status
和myOrder.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.