使用相同键DbContext的多个对象出错
本文关键字:对象 出错 DbContext | 更新日期: 2023-09-27 18:21:33
我收到错误
"ObjectStateManager中已存在具有相同键的对象。ObjectStateManager无法跟踪具有相同属性的多个对象钥匙"
我在两个地方使用了这种方法。第一,工作正确,但第二,我有错误。
这个问题是怎么解决的?
我的方法:
public static void UpdateMehod(ModelEntities context, ProcessedFilest processedFiles)
{
context.Set<ProcessedFiles>().Attach(processedFiles);
context.Entry(processedFiles).Property(p => p.ID).IsModified = true;
context.SaveChanges();
}
我创建了新方法:
public static void UpdateProtocol(ModelEntities上下文,ProcessedFilesXml processedFiles Xml){var entry=上下文。条目(processedFilesXml);
if (entry.State == EntityState.Detached)
{
var set = context.Set<ProcessedFilesXml>();
ProcessedFilesXml attachedEntity = set.Find(processedFilesXml.ProcessedFileXmlID);
if (attachedEntity != null)
{
var attachedEntry = context.Entry(attachedEntity);
attachedEntry.CurrentValues.SetValues(processedFilesXml);
}
else
{
entry.State = EntityState.Modified;
}
}
//context.Set<ProcessedFilesXml>().Attach(processedFilesXml);
//context.Entry(processedFilesXml).Property(p => p.Protocol).IsModified = true;
//context.SaveChanges();
}
但我不知道是谁创建保存更改?
如果从上下文加载实体,则不能再次附加具有相同键的实体。查看此问题或此
public override void Update(T entity) where T : IEntity {
if (entity == null) {
throw new ArgumentException("Cannot add a null entity.");
}
var entry = _context.Entry<T>(entity);
if (entry.State == EntityState.Detached) {
var set = _context.Set<T>();
T attachedEntity = set.Find(entity.Id); // You need to have access to key
if (attachedEntity != null) {
var attachedEntry = _context.Entry(attachedEntity);
attachedEntry.CurrentValues.SetValues(entity);
} else {
entry.State = EntityState.Modified; // This should attach entity
}
}
enter code here
}