2013-02-13 20 views
6
var paymentAttempt = _auctionContext.PaymentAttempts.Where(o => o.Id == paymentAttemptId).SingleOrDefault(); 
if (paymentAttempt != null) 
{ 
    paymentAttempt.PaymentAttemptStatusId = (int)PaymentAttemptStatus.Defunct; 
    paymentAttempt.PaymentAttemptStatus = _auctionContext.PaymentAttemptStatuses.Where(pas => pas.Id == paymentAttempt.PaymentAttemptStatusId).First(); 

    var relevantWinningBidsTotalPrices = _auctionContext.GetWinningBidsTotalPricesForPaymentAttempt(paymentAttemptId).ToArray(); 

    foreach (var winningBid in relevantWinningBidsTotalPrices) 
    { 
     winningBid.Locked = false; 
     _auctionContext.UpdateObject(winningBid); 
    } 
    _auctionContext.SaveChanges(); 
} 

güncellememesi beklenen ancak paymentAttempt olmadığından winningBid güncellenir denir. Bu neden? Gerçekten sinir bozucu. Hata da yok. EF'in nesneyi veya benzeri bir şeyi takip etmemesi gibi bir problem olsaydı meydana gelememeyi umardım ama böyle bir hata olmaz.Varlık Framework SaveChanges()</p> <pre><code>_auctionContext.SaveChanges(); </code></pre> <p>sonra veritabanını Yukarıdaki kodda

+0

Kullanım almak için Ekle senin değiştirilmiş varlık içeriği. Kaydetmeden önce. Bağlam ne hakkında konuştuğuna dair hiçbir fikrim yoktu. – Tabish

cevap

10

Bu nedenle, güncelleştirilmesi gereken bir nesne olduğunu bildirmek için paymentAttempt nesnesini içeriğinize iletmeniz gerekir.

_auctionContext.Attach(paymentAttempt); 
_auctionContext.ObjectStateManager.ChangeObjectState(paymentAttempt, System.Data.EntityState.Modified); 
+0

Giriş yöntemim yok. –

+0

Öğe çerçevesinin hangi sürümünü kullanıyorsunuz? – Jorge

+0

4. WCF Veri Hizmetlerini EF'nin üzerinde kullanıyoruz. –

1

Bu soru üzerinde ancak farklı bir sorun için düştü:

// any changes related to the paymentAttempt object 

_auctionContext.Entry(paymentAttempt).State = EntityState.Modified; 

foreach (var winningBid in relevantWinningBidsTotalPrices) 
{ 
    winningBid.Locked = false; 
    _auctionContext.UpdateObject(winningBid); 
} 

_auctionContext.SaveChanges(); 

Diğer bir seçenek Attach yöntemdir: _auctionContextDbContext örneğidir olduğunu varsayarak Örneğin

. Değiştirilmemiş bir nesnede SaveChanges() öğesini çağırırsanız EF'in hiçbir şeyi güncellemeyeceğini keşfettim. Bu mantıklı, ancak DB'nin güncellenmesi gerekiyordu, böylece diğer kullanıcılar herhangi bir alanın değişip değişmediğine bakılmaksızın SaveChanges'in() yürütüldüğünü göreceklerdi.

sonra
using System.Data.Entity.Infrastructure; 

using System.Data.Entity; 

sadece kullanabilirsiniz: Eğer Entry deneyin ekleyerek yoksa

Dim entry As DbEntityEntry = entities.Entry(myentity) 
    entry.State = Entity.EntityState.Modified 
2

: tüm alanları değiştirmeden bir güncelleme zorlamak için

_auctionContext.Entry(paymentAttempt).State = EntityState.Modified; 
_auctionContext.SaveChanges(); 
İlgili konular