- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 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/
我正在使用基于代码优先 DBContext 的 EF5 设置。 在 DbMigrationsConfiguration.Seed 中,我试图用默认的虚拟数据填充数据库。为完成此任务,我使用了 DbSe
ConcurrentDictionary Pitfall - Are delegates factories from GetOrAdd and AddOrUpdate synchronized?注意
我有一个ConcurrentDictionary。我使用它的 AddOrUpdate 方法来操作它的项目。 我的问题是:是否可以使用 AddOrUpdate 的更新参数来包含 if 语句?例如。我的
我在我的种子方法中使用 AddOrUpdate 来保持我的权限是最新的,但是,在以下代码更新现有角色(而不是创建它)的情况下,我创建的任何新权限都不会添加到角色。我做错了什么? foreach (Ke
下面是我正在尝试做的事情: 我有 users 表和 user_profiles 表,我在 users 中插入 name、email 表和 phone, address, .... etc 在 user
所以我想做的是添加或更新用户,具体取决于该用户是否已存在于我的种子方法中。 我希望条件是如果具有名字和姓氏的用户已经存在但添加 && 似乎不起作用。 foreach (User user in use
我有 2 个类: class RealmUser: Object { @objc dynamic var id: String = "" @objc dynamic var age:
我正在使用下面的这段代码来尝试根据字典对象的键更新字典对象中的值。 public static ConcurrentDictionary UsersViewModel = new Concurrent
假设如下代码: if (myDictionary.ContainsKey(aKey)) myDictionary[aKey] = aValue; else myDictionary.A
我在播种数据时遇到了一些问题,我能够通过一个非常小的应用程序重现该问题。 假设你有这个种子方法: protected override void Seed(JunkContext contex
我正在按照说明进行操作 here试图 mock 我的 DbSet和 DbContext使用 Moq 进行单元测试。 我正在测试的服务如下所示 public class MyItemService {
IDbSetExtensions.AddOrUpdate 旨在帮助编写无论数据库是空的还是已填充的代码都可以正常工作。但是链接对象需要不同的代码。当数据库为空时,对象还没有 ID,您可以通过分配导航属
private readonly ConcurrentDictionary _colorSet; public void BuildColorSet(IList colorNames, st
这可能是一个简单的问题,但我是 Code First 和迁移的新手,所以请多多包涵。我会将示例代码保持在最低限度以显示问题: 我有一个 BaseAuditableEntity,其中包括这个(除其他外,
在当前项目中,我通过两种方式为并发字典中的现有键赋值。 一个。 concurrentDictionary1[key] = value; 和 B. concurrentDictionary2.AddOr
我有一个实体如下: public class PaletteColor { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Ident
这就是我们拥有的: public class Car { public int Id { get; set; } public Engine Engine { get;
我在 C# 中使用并发字典 addOrUpdate。问题是这个字典不是在维护整个字典(列表),而是它只将最后一条记录添加或更新到字典中,并且该记录在字典中多次找到;我在 foreach 循环中遍历了它
这个问题一直是我周末的噩梦...我有一个表,其中 AddOrUpdate 无法正常工作,它一直在添加但从不更新。 我想做的就是当我使用 AddOrUpdate 将新实体添加到表中时,我希望它检查 Ap
我尝试在 ConcurrentDictionary 中使用 AddOrUpdate 方法。 来自本页的“备注”部分 https://msdn.microsoft.com/en-us/library/d
我是一名优秀的程序员,十分优秀!