代码之家  ›  专栏  ›  技术社区  ›  Aleksey Kontsevich

更正EF 6中AddOrUpdate()的多个条件

  •  3
  • Aleksey Kontsevich  · 技术社区  · 7 年前

    db.ReceivedMessages.AddOrUpdate(r => r.PatientId == status.PatientId && 
                                        r.DialogId == status.ConversationId, record);
    

    属性表达式“r=>转换(((r.PatientId== AndAlso(r.DialogId== 值(ManagerDB+<c\u DisplayClass6\u 0.status.ConversationId))” t、 MyProperty'VB.Net:'Function(t)t.MyProperty'。指定时 t、 MyProperty1,t.MyProperty2}'VB.Net:'函数(t)新增{ t、 MyProperty1,t.MyProperty2}。

    将表达式更改为:

     db.ReceivedMessages.AddOrUpdate(r => new { r.PatientId, r.DialogId }, record);
    

    AddOrUpdate()

    1 回复  |  直到 7 年前
        1
  •  1
  •   Aleksey Kontsevich    7 年前

    错误应在EF 6.2.0中修复: https://github.com/aspnet/EntityFramework6/issues/9

    解决方法:安装 EF beta version

    ReceivedMessage record = db.ReceivedMessages.FirstOrDefault(p => p.PatientId == status.PatientId &&
                                                                        p.DialogId == status.ConversationId);
    //  Add new if not exists
    bool newRecord = false;
    if (record == null)
    {
        record = new ReceivedMessage();
        record.Id = Guid.NewGuid();
        newRecord = true;
    }
    
    // Save fields
    // ...
    
    // Save to DB
    if (newRecord)  // Workaround for EF 6.1 bug: https://stackoverflow.com/a/44811951/630169
        db.ReceivedMessages.Add(record);
    else
        db.Entry(record).CurrentValues.SetValues(record);
    
    db.SaveChanges();