Entity framework 4 EF-通用;AddOrUpdate";方法突然中断
我在ASP.NET4.0WebForms应用程序中使用EntityFramework4(数据库优先方法) 我所做的基本工作是从我的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并检查对象上下文是否已经知道该对
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设计器识别。然后,解决方案是删除并重新添加有问题的整个表。