C# 如何获取DbUpdateConcurrencyException.Entry的基础对象
我目前正在使用实体框架6。我正在重新加载DbUpdateConcurrencyException.Entry,但我还需要对首先导致异常的特定条目执行一些任务。我不知道如何访问那个特定的底层对象,如果能在这个问题上得到任何帮助,我将不胜感激 我有以下方法:C# 如何获取DbUpdateConcurrencyException.Entry的基础对象,c#,wpf,entity-framework,C#,Wpf,Entity Framework,我目前正在使用实体框架6。我正在重新加载DbUpdateConcurrencyException.Entry,但我还需要对首先导致异常的特定条目执行一些任务。我不知道如何访问那个特定的底层对象,如果能在这个问题上得到任何帮助,我将不胜感激 我有以下方法: public void ReloadEntries() { foreach (var item in entries) { item.Reload(); //TODO: cast back to
public void ReloadEntries()
{
foreach (var item in entries)
{
item.Reload();
//TODO: cast back to original "Product" datatype so I can
//re-process a SPECIFIC property on underlying object here
}
entries.Clear();
}
稍后我将更改foreach,因为我意识到“条目”始终只包含一项。您需要类似以下内容:
try
{
item.Reload();
//TODO: re-process property on underlying object here
}
catch (DbUpdateConcurrencyException ex)
{
// process on ex.Entries[0].Entity or
// ex.Entries[0].Entity.OriginalValues
((DataType)ex.Entries[0].Entity).Property = value;
// if your object context is still open, you could try to re-submit after trying the
// entity
ctx.Attach(ex.Entries[0].Entity);
ctx.SaveChanges();
}
此链接可能有助于处理该条目列表:请提供(代码)到目前为止您已尝试的内容。我已进行编辑,以显示我正在使用的方法。到目前为止(解决问题)我还没有任何代码,因为我不知道从哪里开始。也许你可以使用
entry.CurrentValues[“PropertyName”]
(和/或entry.OriginalValues
)。谢谢你的回复。然而,我想要的行为是以某种方式将这个条目转换回它的原始产品数据类型,这样我就可以访问它的(产品)属性。。。然后,您只需将ex.Entries[0].Entity强制转换为所需属性的实体。因此,类似于(Product)ex.Entries[0].Entity或如果您想获取特定属性ex.Entries[0].OriginalValues.Items[“Product.PropertyName”]的内容将是您想要获取的值。谢谢您,托马斯,我对您的答案进行了一些编辑,以便更好地回答我的问题。