C# 错误:多个对象具有相同的密钥DbContext

C# 错误:多个对象具有相同的密钥DbContext,c#,dbcontext,updating,C#,Dbcontext,Updating,我犯了一个错误 “ObjectStateManager中已存在具有相同密钥的对象。 ObjectStateManager无法跟踪具有相同属性的多个对象 钥匙。” 我在两个地方使用了这种方法。首先-工作正确,但在第二个我有错误 这个问题是怎么解决的 我的方法: public static void UpdateMehod(ModelEntities context, ProcessedFilest processedFiles) { context.Set<ProcessedFile

我犯了一个错误

“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();
}
publicstaticvoidupdatemethod(模型实体上下文,ProcessedFilest processedFiles)
{
context.Set().Attach(processedFiles);
context.Entry(processedFiles).Property(p=>p.ID).IsModified=true;
SaveChanges();
}
我创建了一个新方法:

公共静态void UpdateProtocol(ModelEntities上下文,ProcessedFilesXml ProcessedFilesXml) { var entry=context.entry(processedFilesXml)

if(entry.State==EntityState.Detached)
{
var set=context.set();
ProcessedFileXML AttacheIdentity=set.Find(ProcessedFileXML.ProcessedFileXmlID);
如果(附件身份!=null)
{
var attachedEntry=context.Entry(attachedEntity);
attachedEntry.CurrentValues.SetValues(processedFilesXml);
}
其他的
{
entry.State=EntityState.Modified;
}
}
//context.Set().Attach(processedFilesXml);
//context.Entry(processedFilesXml).Property(p=>p.Protocol).IsModified=true;
//SaveChanges();
}

但是我不知道如何创建savechanges?

如果从上下文加载实体,则无法再次附加具有相同键的实体。请参见此或

公共覆盖无效更新(T实体),其中T:entity{
if(实体==null){
抛出新ArgumentException(“无法添加空实体”);
}
var entry=_context.entry(实体);
if(entry.State==EntityState.Detached){
var set=_context.set();
T attachedEntity=set.Find(entity.Id);//您需要有权访问密钥
如果(附件身份!=null){
var attachedEntry=_context.Entry(attachedEntity);
attachedEntry.CurrentValues.SetValues(实体);
}否则{
entry.State=EntityState.Modified;//这应该附加实体
}
}
在这里输入代码
}

        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