【发布时间】:2016-01-28 19:46:10
【问题描述】:
我有以下方法:
public bool RemoveBookCategories(IDictionary<Books, IList<C_Category>> books)
{
_context.Configuration.AutoDetectChangesEnabled = true;
foreach (var book in books.Keys)
{
foreach (var category in books[book])
{
if (!_context.ChangeTracker.Entries<Books>().Any(e => e.Entity.BookId == book.BookId))
_context.Books.Attach(book);
if (!_context.ChangeTracker.Entries<C_Category>().Any(e => e.Entity.Id == category.Id))
_context.C_Category.Attach(category);
book.C_Category.Remove(category);
}
}
if (_context.SaveChanges() > 0)
return true;
return false;
}
它按预期工作.. 有时。 其他时候我会收到此错误消息:
{"附加类型为“DataAccess.Plusbog.C_Category”的实体失败,因为同一类型的另一个实体已经具有相同的主键值。使用“附加”方法或设置实体的状态时可能会发生这种情况如果图中的任何实体具有冲突的键值,则为“未更改”或“已修改”。这可能是因为某些实体是新的并且尚未接收到数据库生成的键值。在这种情况下,请使用“添加”方法或“添加了'实体状态以跟踪图表,然后根据需要将非新实体的状态设置为'未更改'或'已修改'。"}
尽管我觉得这几乎是我试图避免在 changetracker 中查找实体的原因。 我觉得我已经尝试了所有我能找到的解决方案,但没有任何效果:-/
任何帮助将不胜感激:-)
【问题讨论】:
标签: c# sql-server entity-framework entity-framework-6