2016-03-23 26 views
0

hedefine sahiptir. Schedule tablosunda LastUpdated sütunu güncellemeliyim. Bu hedefe ulaşmak için birkaç farklı yöntem denedim ama başarıya ulaşamadı. Kodun doğru veritabanına işaret ettiğinden eminim ve ayrıca değişiklikler için doğru [yerel] veritabanını kontrol ediyorum. SaveChanges() üzerinde bir kesme noktası ayarlandığında, kod o noktada durur. "Db" nin doğru kayıt için güncel Tarih/Saat bilgisini içerdiğini görebiliyorum. Yine de, veritabanına kaydetmez.DbContext, kaydetme değişikliklerini koruduğu zaman

Yığın Taşması'ndan geçtikten sonra, Eklenti'yi kullanma ve Varlık Durumunu [Değiştirilmiş] olarak ayarlama gibi bazı önerilerde bulundum. Bu önerilerin ikisi de işe yaramadı. Değişikliğin bağlam değişkenine uygulandığını görsem de HasChanges yanlış döndürür.

Ayrıca, bu yöntemin sınıfı, veritabanına erişme ve bazı ekler yapma konusunda sorun yaşamayan diğer yöntemleri içerir. Aşağıdaki kod, bunu yapmaya çalıştığım konusunda size bir fikir vermek için sadece üç farklı denemedir. Herhangi bir öneri çok takdir edilecektir. Sütun çünkü

public static void UpdateLastUpdated(int scheduleId) 
{ 
    using (var db = new MyContext()) 
    { 
     var schedule = from s in db.Schedule where s.Id == scheduleId select s; 
     schedule.FirstOrDefault().LastUpdated = DateTime.Now; 
     db.SaveChanges(); 

     var schedule2 = db.Schedule.Find(scheduleId); 
     schedule2.LastUpdated = DateTime.Now;; 
     db.SaveChanges(); 

     var schedule3 = db.Schedule.Single(s => s.Id == scheduleId); 
     schedule3.LastUpdated = DateTime.Now; 
     db.SaveChanges(); 
    } 
} 
+2

Güncellemenin nasıl yapıldığını biliyor musunuz? SQL'in gönderilip gönderilmediğini görmek için SQL profilciye bakın. Hangi veritabanı? VS iç veritabanlarının güncellemeleri görememenizi tetiklediğinin farkında mısınız? Veritabanında hiçbir güncellemenin olmadığını nasıl kontrol edersiniz? Yerel veritabanı projesi? Programın bir kopyasından başka bir kopyasına bakarsınız (ve her başlangıçta yazılanın üzerine yazılır). – TomTom

+0

SSMS'de bir SELECT * FROM Zamanlamaları yaptığımda (tabii ki bir mola noktasında devam ettiğimde), değerin değişmediğini görebiliyorum. Şu anda tabloda sadece üç kayıt var, bu yüzden güncellenecek hiçbir şeyi görmesi oldukça kolay. – John

+0

Bunlar değişmedikleri anlamına gelmeyebilir - dediğim gibi sadece yanlış veritabanına bakıyorsunuz. Profil, SQL'in gönderilip gönderilmediğini kontrol edin. – TomTom

cevap

1

... konuydu bilgisayarlı. Aynı tablodaki başka bir sütunu güncellemeyi denedim ve iyi çalıştı. Sonra hesaplanan sütunlar üzerinde biraz araştırma yaptım ve problem olduğunu anladım. Ek açıklama kaldırıldıktan sonra kod iyi çalışır. Şimdi sadece açıklama olmadan set edilen varsayılan değeri nasıl alacağımı anlamaya ihtiyacım var.

Çözüm ve yorum öneren herkese teşekkür ederiz. Çok takdir!

0

Değişikliği belirtmelidir

db.Entry(schedule3).State = EntityState.Modified; 

ya yüzden deneme yanılma bir sürü sonra, çıkıyor gibi

db.Entry(schedule3).Property(x => x.LastUpdated).IsModified = true; 
+2

Bkz. Https://msdn.microsoft.com/en-us/data/jj592676.aspx –

+3

Durumda değişiklik izleme etkinleştirilirse varlık durumunun değiştirildiğini belirtmek için '' seçeneğiniz yoktur. –

+0

tamam, aclaration için teşekkürler.Http://www.c-sharpcorner.com/UploadFile/ff2f08/working-with-change-tracking-proxy-in-entity-framework-6-0/ – Maske

İlgili konular