gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:50:43 29 4
gpt4 key购买 nike

我在我的 ASP.NET 4.0 Webforms 应用程序中使用 Entity Framework 4(数据库优先方法)。

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

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

我的方法使用 EntityKey 并检查对象上下文是否已经知道该对象 - 非常类似于 what Cesar de la Torre of Microsoft shows here在他的博文中:

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: Object mapping could not be found for Type with identity 'MyEntityType'

我完全不记得在此核心代码中更改过任何内容 - 实体类型已定义,存储在 EntityKey 中的 ID 值确实存在于数据库...一切应该没问题 - 但它一直在我身上失败...

这里到底发生了什么??

我确实找到了一些关于该主题的博客和论坛帖子,但没有一个能真正启发我或帮助我解决问题。我一定是搞砸了什么 - 很糟糕 - 但我真的只见树木不见森林 - 有什么提示吗?

最佳答案

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

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

您可以使用 LoadFromAssembly MetadataWorkspace 中的方法上下文。

ObjectContext.MetadataWorkspace.LoadFromAssembly(assembly).

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

关于entity-framework-4 - EF - 通用 "AddOrUpdate"方法突然中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14444287/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com