none
EF Repository Pattern Asenkron Update table uygulamasında sonuç alamıyorum. UpdateAsync RRS feed

  • Genel Tartışma

  • Merhaba,

    Asenkron yöntemi ile table update işlemi yapmak istiyorum.

    public async Task<TObject> UpdateAsync(TObject updated, int key)
     {
         if (updated == null)
             return null;
     
         TObject existing = await _context.Set<TObject>().FindAsync(key);
         if (existing != null)
         {
             _context.Entry(existing).CurrentValues.SetValues(updated);
             await _context.SaveChangesAsync();
         }
         return existing;
     }
    public async Task<TEntity> UpdateAsync(TEntity updated, int key)
    {
        if (updated == null)
            return null;
        using (var context = new TContext())
        {
            TEntity existing = await context.Set<TEntity>().FindAsync(key);
            if (existing != null)
            {
                context.Entry(existing).State = EntityState.Modified;
                var entry = context.Entry(updated);
                context.Set<TEntity>().Attach(updated);
                entry.OriginalValues.SetValues(existing);
                await context.SaveChangesAsync();
            }
            return existing;
        }
    }

    bir çok varyasyon denedim bir türlü sonuç alamadım. Yardımlarınızı rica ediyorum.


    1 Ekim 2015 Perşembe 19:28

Tüm Yanıtlar

  • public async Task<TObject> UpdateAsync(TObject updated, int key)
     {
         if (updated == null)
             return null;
     
         TObject existing = await _context.Set<TObject>().FindAsync(key);
         if (existing != null)
         {
             _context.Entry(existing).CurrentValues.SetValues(updated);
             await _context.SaveChangesAsync();
         }
         return existing;
     }
    Burada zaten mevcutu geri gönderiyorsun. Günceli tekrar çek veritabanından.

    Mail Blog Web Site

    2 Ekim 2015 Cuma 05:45
  • Aşağıdaki gibi dener misin direkt ? Ama key değerini updated nesnesi içinde set etmelisin.

    _context.Entry<TObject>(updated).State = EntityState.Modified;
    await _context.SaveChangesAsync();


    oguzkurtcuoglu.com


    2 Ekim 2015 Cuma 08:33
  • Arkadaşlar çok teşekkür ediyorum.

    "Burada zaten mevcutu geri gönderiyorsun. Günceli tekrar çek veritabanından."

    ().FindAsync(key);mevcudu çekiyorum. 

    context.Entry(existing).CurrentValues.SetValues(updated);bu işlemde bu kısmı çözmem gerek yardımcı olurmusunuz.

    public async Task<TEntity> UpdateAsync(TEntity updated, int key)
            {
                if (updated == null)
                    return null;
                using (var context = new TContext())
                {
                    TEntity existing = await context.Set<TEntity>().FindAsync(key);
                    if (existing != null)
                    {
                        context.Entry(existing).CurrentValues.SetValues(updated);
                        context.Entry<TEntity>(updated).State = EntityState.Modified;
                        await context.SaveChangesAsync();
                    }
                    return existing;
                }
            }

    Bu şekilde denedim. "The property 'id' is part of the object's key information and cannot be modified. ", hatası alıyorum. key ile aynı id nesneyi gönderdiğimde ise

    Key =4,

    updated=

      {
        "id":4,
        "AdiSoyadi": "Dilek Erdem",
        "TcNo": "18557641164",
        "SicilNo": "11155511",
        "SGKNo": "2222452222",
        "Durum": "Aktif",
        "Photo": null
      }

    "Attaching an entity of type 'ISS.Entities.Concrete.Personel' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the 'Add' method or the 'Added' entity state to track the graph and then set the state of non-new entities to 'Unchanged' or 'Modified' as appropriate."

    Hatası alıyorum.

    2 Ekim 2015 Cuma 09:29
  • public async Task<TEntity> UpdateAsync(TEntity entity,int key)
    {
    _context.Entry<TObject>(updated).State = EntityState.Modified;
    await _context.SaveChangesAsync();
    return await _context.Set<TEntity>().FindAsync(key);
    }

    gibi.

    Mail Blog Web Site

    2 Ekim 2015 Cuma 13:47
  •  "Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.",

    Hatası alıyorum :(

    Nasıl bir sorun anlamadım diğer get getall put delete asenkron metodlarda hiç bir sorunum yok. bir tek bunu çözemedim.

    optimistic concurrency exceptions hatasını düz updatede de alıyorum.

    public bool Update(TEntity entity)
            {
                using (var context = new TContext())
                {
                    try
                    {
                        //context.Configuration.ValidateOnSaveEnabled = false;
                        //context.Set<TEntity>().Attach(entity);
                        var addEntity = context.Entry<TEntity>(entity);
                        addEntity.State = EntityState.Modified;
                        return context.SaveChanges() > 0;
                    }
                    catch (DbUpdateConcurrencyException ex)
                    {
                        return false;
                    }
                  
                }
            }
    personel tablomda

    publicbyte[] rowVersion { getset; }

    alanımda var..

     

    Bu hatayı nasıl çözebileceğim konusunda fikriniz var mı?


    • Düzenleyen berdem 3 Ekim 2015 Cumartesi 06:30
    2 Ekim 2015 Cuma 14:32