我在我的 ASP.NET 4.0 Webforms 应用程序中使用实体框架 4(数据库优先方法)。
我基本上在做的是从 my 中获取要编辑的实体ObjectContext
,并在 Web 表单上显示用户应该输入数据(或修改现有数据)的字段。
当需要将数据存储回来时,我正在从 Web 表单中读取值,构建一个新Entity
实例,然后我有一个名为的通用方法AddOrUpdate
来检测这是否是一个新实体(因此它需要插入它),或者如果它是现有的(因此它需要更新现有数据)。
我的方法使用EntityKey
and 检查对象上下文是否已经知道这个对象 - 非常类似于微软的 Cesar de la Torre在他的博客文章中展示的内容:
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);
}
}
}
这工作得很好 - 最长的时间。但是今天,突然之间,我在context.TryGetObjectByKey
声明中不断收到这样的例外情况:
System.InvalidOperationException:找不到标识为“MyEntityType”的类型的对象映射
我根本不记得在这个核心代码中更改了任何内容 - 并且定义了实体类型,ID
存储在数据库中的值EntityKey
确实存在于数据库中......一切都应该没问题 - 但它一直在我身上失败......
这里到底发生了什么??
我确实找到了一些关于该主题的博客和论坛帖子,但没有一个可以真正启发我或帮助我解决问题。我一定是搞砸了——糟糕——但我真的只见树木不见森林——有什么提示吗?