burada mesele, farklı parçacıkları aynı nesneye erişim kaçıyor DBContext nesneye erişimi seri hale değil nasıl giderileceği benim MS blog geçmesi gerektiğini
. Bu nedenle, çözüm her zaman veritabanında etkileşimde bulunmanız için yeni bir DbContext nesnesi oluşturmanızı sağlamaktır.
using (var db = new SourceLogContext())
{
db.LogSubscriptions.First(s => s.LogSubscriptionId == LogSubscriptionId)
.Log.Add((LogEntry)e.LogEntry);
db.SaveChanges();
}
Tam olarak emin olmadığım şey, kullanıcı arabirimini güncellemeyle nasıl başa çıkacağınızdır. Yukarıdaki kod bir arka plan iş parçacığında çalışıyorsa ve kullanıcı arabirimi önceden LogSubscription.Log koleksiyonuna bağlanmışsa, UI iş parçacığı koleksiyonun farklı bir örneğini başvuruyor ve bu girdiye yeni girişi de eklemelisiniz.
_uiThread.Post(entry => Log.Add((LogEntry)entry), e.LogEntry);
bir başka komplikasyon kullanıcı UI üzerinden erişebilecek sahiptir dek kişiler veritabanından yüklenen olmayabilir geç yükleme olduğunu. Ben bu noktalara yorumlarınızı bekliyoruz ediyorum .. Eğer UI iş parçacığı ömrü boyunca DBContext için en az bir referans sürdürmek zorunda görünüyor
private static readonly SourceLogContext DbUILazyLoadContext = new SourceLogContext();
bu işlemek için ..
Sorunu hiç çözdünüz mü? Benzer bir problemim var. –
Gerçekten cevabımda sahip olduğumdan daha iyi bir anlayışa sahip değildim. Öğe bağlamına kez [AddNewLogEntry] (https://github.com/tomhunter-gh/SourceLog/blob/aed3718af18fcff471f04c83f83a0160b97b6829/SourceLog.Model/LogSubscription.cs#L90) yönteminde iki koleksiyonlarına eklenen görebilirsiniz koleksiyon ve bir kez "UI koleksiyonu". –
Aynı problemi yaşadım, diğer süreçler onu kullanırken içeriğe erişmeye çalışan bir arka plan çalışması yapıyordu. Diğer işlemler bittikten ve çözdüğümden sonra bu aramayı değiştirdim. Sanırım onları sıralamak da işe yarayacaktı. EF'in iş parçacığını yönetmesini bildiğim kadarıyla, arka plan çağrısını yapana kadar böyle bir sorunum olmadı. – Hannish