c# - 更新对象的通用方法错误( Entity Framework 4)

标签 c# entity-framework generics entity-framework-4

我正在使用 EF4 开发应用程序并创建了一个通用方法,但生成了此错误。

方法:

public Boolean change (T)
{
    ctx.ApplyCurrentValues ​​<T> (t.GetType (). Name, t);
    return save ();
}

gerendo 的错误是这样的:

在 ObjectStateManager 中找不到其键与所提供对象的键匹配的对象。验证提供的对象的键值是否与必须应用更改的对象的键值相匹配。

有谁知道如何解决这个问题?

最佳答案

ApplyCurrentValues 将提供的分离实体的值更新为附加实体。此异常表示您没有具有相同 key 的附加实体。这意味着在调用此方法之前,您没有在同一上下文中从数据库加载实体。

您可以将您的方法修改为:

public Boolean Change<TEntity>(TEntity entity)  where TEntity : EntityObject
{
    // Loads object from DB only if not loaded yet
    ctx.GetObjectByKey(entity.EntityKey);  
    ctx.ApplyCurrentValues​​<T>(entity.GetType().Name, entity);
    ctx.SaveChanges();
}

关于c# - 更新对象的通用方法错误( Entity Framework 4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5347574/

相关文章:

c# - 如何在类库项目中正确定义 DBContext?

c# - 找到多个名为 'NewProject.Models.DbContext' 的 DbContext 通过使用准确大小写的完全限定名称指定要使用的一个

c# - Linq 连接返回重复结果

c# - 短时间更改按钮颜色

c# - : (colon) in c# for Unity3d

c# - 此项目使用的 Microsoft.NET.Sdk 版本不足以支持对面向 .NET Standard 1.5 或更高版本的库的引用

c# - 如何首先在 Entity Framework 代码中创建 2 个相同类型的 dbsets?

ios - 在 Swift 中,不能子类泛型 : class Foo<T> : T {}

c# - 如何对泛型类型使用运算符

java - 是否可以将抽象方法的返回类型设置为与类相同?