- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我添加多个连续数据时,SaveChanges() 方法发生错误。
异常对数据库的更改已成功提交,但更新对象上下文时出错。 ObjectContext 可能处于不一致状态。内部异常消息:AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。在调用 AcceptChanges 之前确保键值是唯一的。
我的基础服务
public void Delete(T entity)
{
ObjectSet.DeleteObject(entity);
Context.SaveChanges();
}
public void Add(T entity)
{
ObjectSet.AddObject(entity);
Context.SaveChanges();
}
public void Attach(T entity)
{
ObjectSet.Attach(entity);
Context.SaveChanges();
}
public void Update(Expression<Func<T, bool>> where, T entity)
{
var ent = First(where);
ent = entity;
Context.SaveChanges();
}
最佳答案
我遇到了这个问题,发现我在做以下操作,使 EntityFramework 变得与数据库中的数据不同步:
1) 通过 Entity Framework 的 Context 对表的行进行查询。这样做,EntityFramework 上下文会在其本地 View 中保留这些对象的副本。
2) 通过 SQL 查询截断表(因此 Entity Framework 上下文不知道发生了这种情况。即使实体在数据库中被截断了,它们仍然在其本地 View 中)。由于表的主键是自动递增的(IDENTITY (1,1)),截断调用使表的主键计数器重置为 1。
3) 通过Entity Framework向表中添加行,然后调用SaveChanges()。由于表截断,新行的主键为 1。创建行后,EntityFramework 在数据库中查询行值,创建一个新实体,填充实体中的值并将实体添加到其本地 View .
因为上下文已经有另一个主键 = 1 的对象存储在它的本地 View 中(从步骤 1 开始),当它试图将具有相同主键的第二个实体添加到本地 View 时抛出异常。
为避免这种情况, Entity Framework 必须在进行新操作之前与数据库内容保持同步。
在我的例子中,我必须通过调用来解决这个问题:
Context.MyTableEntities.Local.Clear();
Context.SaveChanges();
所以实体先被删除,上下文才被告知。然后我用 SQL 查询截断了表以重置自动递增计数器。
由于首先从本地 View 中删除对象,然后进行表截断(因此它会重置自动递增计数器),因此避免了主键冲突。
希望对您有所帮助。
关于c# - 添加第二个数据时 ObjectStateManager 错误( Entity Framework ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11670983/
使用带有通用存储库模式的 EF5 和 ninject 进行依赖注入(inject),并在尝试使用我的 edmx 使用存储过程将实体更新到数据库时遇到问题。 我在 DbContextRepository
我有以下代码来添加或更新实体对象。根据我添加或更新对象的响应,通过主键查找对象。 添加记录有效,但在更新期间给出此错误消息“ObjectStateManager 中已存在具有相同键的对象。Object
基本上,我有一个表,其中包含一家公司的一些属性。这是“主”表,它们的 ID 用于许多其他表。我基本上是通过这个方法找到他们的ID: private Company currentcompany()
我有这段代码,但是我得到了异常 An object with the same key already exists in the ObjectStateManager. The ObjectStat
我遇到了 ObjectStateManager 的问题。 我正在使用 System.Data.Entity 和 System.Data.Objects 但是它没有显示 ObjectStateManag
我知道已经有人问过很多像这样的问题,但我似乎无法理解哪里出了问题。这是我的代码: [HttpGet] public ViewResult Edit(int id) { User user =
当我尝试从 Entity Framework 4 在我的数据库上下文中调用它时,出现“无法解析符号 ObjectStateManager”错误。我找不到其他人有此问题。我试过使用 System.Dat
我正在尝试将 foo 类型的实体列表插入到表 TB_FOO 中。 Public Sub Insert(ByVal _lstFoo As List(Of TB_FOO)) Try
我正在使用 EISK(员工信息入门工具包)开发应用程序。我的实体图看起来像这样 我尝试通过此代码更新应用程序表。 int apId = Convert.ToInt32(Reque
这是我在 MyObjectContext 类构造函数中所做的: ObjectStateManager.ObjectStateManagerChanged += ObjectStateManagerOb
背景 我在更新 EF 中的实体时遇到了一些问题。我不断收到此错误: “ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象
我需要从我的数据库上下文中返回一个新添加对象的列表。 我读到我必须为此目的使用 ObjectStateManager。问题是,我的数据库上下文没有 ObjectStateManager 属性。 尽管上
我有这段正常工作的代码: db.myTable.DeleteObject(myCurrent); 我得到了这个错误: The object cannot be deleted because it w
我收到此错误“无法删除该对象,因为在 ObjectStateManager 中找不到它。” 我的代码是: protected MyEntities sqlEntities; publi
这两者有什么区别,哪个更好?使用更改对象状态或 Entry().state db.ObjectStateManager.ChangeObjectState(employeeFromDB, Entity
我以为我理解 EF,尤其是在极其简单的 CRUD 方面,但我可能错了。 我有一个 ObjectContext/Repository 模式,在这个例子中是一个 VatCode 实体,它有一个增值税率的集
我正在使用 EF4.1 从我的数据库中删除一个对象: public virtual void Delete(T entity) { _entities.CreateObjectSet().Dele
当我添加多个连续数据时,SaveChanges() 方法发生错误。 异常对数据库的更改已成功提交,但更新对象上下文时出错。 ObjectContext 可能处于不一致状态。内部异常消息:AcceptC
试图在这里处理 Entity Framework ,但我遇到了一些减速带......我有一个 Get() 方法可以正常工作并且已经过测试,但是我的 Delete 方法不起作用: public s
我在屏幕截图中发现了问题: 这是程序开头的代码: public MainWindow() { InitializeComponent(); Blacko
我是一名优秀的程序员,十分优秀!