C# 实体框架分离实体不相等

C# 实体框架分离实体不相等,c#,.net,entity-framework,entity-framework-6,C#,.net,Entity Framework,Entity Framework 6,我正在使用EntityFramework6,我正在尝试使用实体而不进行更改跟踪。所以我申请 MergeOption = MergeOption.NoTracking 在获取实体之前,请访问ObjectQuery 在我的应用程序中,我有一个状态下拉列表,状态是实体。状态下拉列表的ItemSource将设置为对象查询返回的EntityCollection 我有一个包含状态的订单实体。如果我不更改合并选项并使用默认值,我可以将SelectedValue设置为绑定到订单的状态,并且它可以正常工作。但是

我正在使用EntityFramework6,我正在尝试使用实体而不进行更改跟踪。所以我申请

MergeOption = MergeOption.NoTracking
在获取实体之前,请访问ObjectQuery

在我的应用程序中,我有一个状态下拉列表,状态是实体。状态下拉列表的ItemSource将设置为对象查询返回的EntityCollection

我有一个包含状态的订单实体。如果我不更改合并选项并使用默认值,我可以将SelectedValue设置为绑定到订单的状态,并且它可以正常工作。但是,如果我使用了NoTracking,则不会在下拉列表中选择适当的状态


有没有一种方法可以将分离的实体用作ItemSource并仍然正确地绑定SelectedValue?

正如注释所述,您正在通过引用进行比较<代码>状态和<代码>我的订单。状态是两个不同的对象。如果您两次从上下文加载同一实体(但从同一上下文实例),您将得到相同的对象,这就是它们等效的原因

您可以通过主键或实体的每个属性的值进行比较,这取决于您希望等价性对该实体意味着什么

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

if( status.FieldA == myOrder.Status.FieldA &&
    status.FieldB == myOrder.Status.FieldB )
在我在上面的评论中发布的中,作者描述了如何通过在模型中包含外键列来实现这一点。有些人可能不希望外键列包含在他们的模型中,因此这不适合他们(包括我自己),但我想发布一个答案,因为这将解决我的上述问题

在XAML中,您只需使用以下内容,以便组合框使用订单模型的Status_Id属性与StatusCollection中状态的Id属性进行比较:

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


您是通过引用进行比较,而不是通过价值进行比较。我重新表述了问题的最后一部分,询问什么才是真正重要的。手动比较值/引用对我来说并不重要。这对于比较实体很有用。您是否了解如何使ComboBox ItemSource绑定在不同上下文中与实体一起工作?您能否提供更多关于如何绑定数据源的代码以及用于比较值的当前代码?我发现这非常有用。我试图使用分离的实体来避免一次编辑多个实体但只保存一个特定实体的问题。我对整个应用程序使用了单个对象上下文。我意识到这种方法不适合我的情况,所以我开始将其改为“每窗口一个上下文”的方法,目前为止效果良好。