【发布时间】:2018-01-09 14:00:44
【问题描述】:
我正在使用 EF6。
在我清除一个表并且我想向该表添加一个新条目后,我收到以下错误:
存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除
删除数据库表的代码:
public void ResetStatistics() {
_lisDatabase.Database.ExecuteSqlCommand("TRUNCATE TABLE Sortedtubes");
_lisDatabase.sortedtubes.Local.Clear();
}
之后我想使用以下代码向该表添加一个新条目:
Sortedtubes tube = new Sortedtubes();
tube.Time = time;
tube.Milliseconds = time.Millisecond.ToString();
tube.Barcode = barcode;
tube.Tubetype = tubeType;
tube.Target = target;
tube.Materialcode = materialCode;
try {
_lisDatabase.sortedtubes.Add(tube);
_lisDatabase.SaveChanges(); // Error appears here
} catch (DbUpdateConcurrencyException ex) {
// maybe do something here?
}
我尝试了 EF 文档中的建议,但没有成功: https://msdn.microsoft.com/en-us/data/jj592904
编辑
问题似乎是Clear() 方法(_lisDatabase.sortedtubes.Local.Clear();)。在我执行这个方法之后,错误出现在下一个SaveChanges()之后。
所以也许还有其他方法来处理这个问题?我的应用程序中有一个 GridView,它绑定到 sortedtubes 实体,我清除它,以便在截断表格时也清除 GridView。
【问题讨论】:
-
我不确定我是否理解:你删除了你的表,然后你尝试在你删除的表中添加值?
-
ok delete 是我用 sql 命令“truncate table”清除表的错误词
-
_lisDatabase.sortedtubes.Local.Clear()标记要删除的对象。它不只是清除本地集合。你最好使用一个新的_lisDatabase实例。 -
当您使用“ExecuteSqlCommand”时,您的 _lisDatabase 实例已更改。当您尝试保存更改时,看起来“其他人”更改了记录并且您的实例已过时。亚伦的回答应该没问题。
标签: c# entity-framework entity-framework-6