Entity framework 4 EF-通用;AddOrUpdate";方法突然中断

Entity framework 4 EF-通用;AddOrUpdate";方法突然中断,entity-framework-4,webforms,asp.net-4.0,Entity Framework 4,Webforms,Asp.net 4.0,我在ASP.NET4.0WebForms应用程序中使用EntityFramework4(数据库优先方法) 我所做的基本工作是从我的ObjectContext中获取要编辑的实体,并显示用户应该在web表单上输入数据(或修改现有数据)的字段 当需要存储回数据时,我从web表单中读取值,建立一个新的实体实例,然后我有一个名为AddOrUpdate的通用方法,用于检测这是一个新实体(因此需要插入它),还是一个现有实体(因此需要更新现有数据) 我的方法使用EntityKey并检查对象上下文是否已经知道该对

我在ASP.NET4.0WebForms应用程序中使用EntityFramework4(数据库优先方法)

我所做的基本工作是从我的
ObjectContext
中获取要编辑的实体,并显示用户应该在web表单上输入数据(或修改现有数据)的字段

当需要存储回数据时,我从web表单中读取值,建立一个新的
实体
实例,然后我有一个名为
AddOrUpdate
的通用方法,用于检测这是一个新实体(因此需要插入它),还是一个现有实体(因此需要更新现有数据)

我的方法使用
EntityKey
并检查对象上下文是否已经知道该对象-非常类似于他的博文:

public static void AddOrUpdate(ObjectContext context, EntityObject objectDetached)
{
    if (objectDetached.EntityState == EntityState.Detached)
    {
        object currentEntityInDb = null;

        if (context.TryGetObjectByKey(objectDetached.EntityKey, out currentEntityInDb))
        {
            // attach and update the existing entity
        }
        else
        {
            // insert new entity into entity set
            context.AddObject(objectDetached.EntityKey.EntitySetName, objectDetached);
        } 
    }
}
这是最长的一段时间,效果很好。但是今天,突然,出乎意料地,我在
上下文中不断遇到这样的异常。TryGetObjectByKey
语句:

System.InvalidOperationException:找不到标识为“MyEntityType”的类型的对象映射

我根本不记得在这个核心代码中做过任何更改——实体类型已经定义,存储在
EntityKey
中的
ID
值确实存在于数据库中。。。一切都应该是好的,但它总是让我失望

这里究竟发生了什么事


我确实找到了一些关于这个话题的博客和论坛帖子,但没有一篇能够真正启发我或帮助我解决这个问题。我一定是弄糟了什么-不好-但我真的看不到森林中的树木-有什么提示吗?

通常,当EF找不到具有该类型的程序集时,会发生此类问题。如果没有看到完整的异常情况,很难准确地找出原因,但您最近的更改和您使用EF的方式似乎是原因

当EF必须使用上下文上的ObjectSet访问它时,它通常直接从类型本身中选择类型。在其他情况下,如果类型不能从调用的上下文中使用,它将查看调用程序集和调用程序集引用的任何dll。Id它找不到它,它会抛出错误消息

您可以在上下文的上下文中使用该方法

ObjectContext.MetadataWorkspace.LoadFromAssembly(程序集)


这样EF就会知道在哪里查找您的类型。

数据库结构是否会被人更改?是否插入/删除了任何字段或更改了其类型?@anderson.pimentel:其中一个表中添加了一些额外的列-但之后我确实更新了EDMX模型,并且它确实在新列上进行了更新。没有问题。@marc\s是否更改了一些列(除了添加的列)?有时我会遇到一些更改的列未被EDMX设计器识别。然后,解决方案是删除并重新添加有问题的整个表。