Entity Framework Codefirst İle Datetime Setleme
-
Selam arkadaşlar CodeFirst ile oluşturmaya çalıştıgım bir centity im var. Aşagıdaki şekilde ben burada örneğin Kayıt oluşturulurken otomatik olarak Oluşturulma ve Modified alanlarının setlenmesini istiyorum.
Kayıt oluşturulurken createdOn setliycek ve kaydı her güncelleme yaptıgımda ModifiedOn u güncelliycek şekilde yapmam mümkünmü CodeFirst ile ?
public class Customer { public Customer() { SMSs = new List<SMS>(); Permissions = new List<Permission>(); } [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid CustomerId { get; set; } [Required] [MaxLength(100)] public String Name { get; set; } [MaxLength(100)] public String MiddleName { get; set; } [Required] [MaxLength(100)] public String LastName { get; set; } [Required] [MaxLength(20)] public string MobilePhone { get; set; } [MaxLength(20)] public string Email { get; set; } public DateTime? BirthDay { get; set; } [Required] public DateTime? CreatedOn { get; set; } [Required] public DateTime? ModifiedOn { get; set; } public ICollection<SMS> SMSs { get; set; } public ICollection<Permission> Permissions { get; set; } }
-
tam olarak ne yapmak istediğini anlamamakla beraber alttaki link çözüm olabilir. Ayrıntılı olarak anlatırsan yardımcı olabilirim.
-
Hocam db taraflı olarak trigger ile halletsen olmaz mı?
Yada,
createdOn DATETIME NULL DEFAULT (getdate())
olarak belirlesen.
-
Hocam şimdi bir kullanıcı oluştururken ben datetime ve modifedon alanlarını hiç göndermeden otomatik olarak db ye setlenmesini istiyorum. Trigger olayı mantıklı Codefirst ile db oluştururken triggerı da oluşturma ve tetikleme olayı var mıdır ?
Verilen linki inceliyorum birazdan olay hakkında pek fikrim olmadıgından netde baktıklarımı uygulamada sıkıntı çektim.
-
Hocam default değer iş Görmüyor mu?
-
Selam,
Entity Id 0 eşitmi kontrolü yazıp 0 ise create değilse edit tarihlerini yazabilirsin
-
Absolut bunu yazdı
Hocam şimdi bir kullanıcı oluştururken ben datetime ve modifedon alanlarını hiç göndermeden otomatik olarak db ye setlenmesini istiyorum. Trigger olayı mantıklı Codefirst ile db oluştururken triggerı da oluşturma ve tetikleme olayı var mıdır ?
Verilen linki inceliyorum birazdan olay hakkında pek fikrim olmadıgından netde baktıklarımı uygulamada sıkıntı çektim.
hocam üstte attığım linkte, trigger kullanmadan, EF'nin saveChanges() metodunu override ederek araya kendi yazmış olduğu metotu eklemiş
public override int SaveChanges() { AddTimestamps(); return base.SaveChanges(); }
Eğer trigger kullanıp, bunu da EF içinde yazıcam dersen;
https://github.com/NickStrupat/EntityFramework.Triggers bakmanı tavsiye ederim.
Longer example(targeting EF6 for now) başlığı altında basit bir örnekte yapmış.
Projenin boyutuna göre, ileriyi düşünerek bi yol seçmelisin;
1.Yöntem İleride her defasında sql tarafında trigger yazmak yerine EF'de tutarsın.
2.Yöntem EF'nin saveChanges() virtualını override edersin. Bunuda bir class'a çekersin. ModifiedOn vs işlemlerin de yeni açtığın class'tan inherit alırsın.
3.Yöntem trigger yazıcaksın
4.Yöntem Customer() constructor'ı içerisine
public Customer() { LastName = "Tahribat"; CreatedDate = DateTime.Now; }
yazıp default value'larını basıcaksın.
Bir kaç yöntem var çözüm senin :)
Takıldığın bir yer olursa özelden yaz, yardımcı olurum
saybirs tarafından 14/Mar/17 12:37 tarihinde düzenlenmiştir -
saybirs bunu yazdıAbsolut bunu yazdı
Hocam şimdi bir kullanıcı oluştururken ben datetime ve modifedon alanlarını hiç göndermeden otomatik olarak db ye setlenmesini istiyorum. Trigger olayı mantıklı Codefirst ile db oluştururken triggerı da oluşturma ve tetikleme olayı var mıdır ?
Verilen linki inceliyorum birazdan olay hakkında pek fikrim olmadıgından netde baktıklarımı uygulamada sıkıntı çektim.
hocam üstte attığım linkte, trigger kullanmadan, EF'nin saveChanges() metodunu override ederek araya kendi yazmış olduğu metotu eklemiş
public override int SaveChanges() { AddTimestamps(); return base.SaveChanges(); }
Eğer trigger kullanıp, bunu da EF içinde yazıcam dersen;
https://github.com/NickStrupat/EntityFramework.Triggers bakmanı tavsiye ederim.
Longer example(targeting EF6 for now) başlığı altında basit bir örnekte yapmış.
Projenin boyutuna göre, ileriyi düşünerek bi yol seçmelisin;
1.Yöntem İleride her defasında sql tarafında trigger yazmak yerine EF'de tutarsın.
2.Yöntem EF'nin saveChanges() virtualını override edersin. Bunuda bir class'a çekersin. ModifiedOn vs işlemlerin de yeni açtığın class'tan inherit alırsın.
3.Yöntem trigger yazıcaksın
4.Yöntem Customer() constructor'ı içerisine
public override int SaveChanges() { AddTimestamps(); return base.SaveChanges(); }
yazıp default value'larını basıcaksın.
Bir kaç yöntem var çözüm senin :)
Takıldığın bir yer olursa özelden yaz, yardımcı olurum
Hocam açıklama için teşekkürler. Şuanda benim için sanki en kullanışlı yol 2. olan gibi. Attıgınız linkde anlatım gayet net ve güzel.
Müsait bir zamanımda deneme yapacagım takıldıgım nokta olursa yazarım çok teşekkürler.
-
@saybirs hocam SaveChanges() i context de override ederek olayı çözdüm. Şuanda modified olayınıda güzel bir şekilde basıyor.
Herkeze yardımları için teşekkür ederim.
-
Selam dostum,
Şimdi anladığım kadarıyla tablona yeni kayıt girildiğinde otomatik olarak CreatedOn alanına kayıdın oluşturulma tarihi yazılsın istiyorsun. Kayıt güncellendiğinde ise ModifiedOn alanı güncellensin istiyorsun.
1. Yeni kayıt oluşturulduğunda CreatedOn alanına değer atanması için sınıfını aşağıdaki gibi düzenle. Sonra Sql Server' da default value kısmına getdate() yaz.
[DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime CreatedOn { get; set; }
2. Kayıt güncellendiğinde ModifiedOn alanına otomatik değer atanması içinse ya C# tarafında güncelleme işlemi yapıldığında sen değer ataması yapacaksın yada sql server tarafında trigger yazacaksın.
Örnek işini görür sanırım.
-
Diathorus bunu yazdı
Selam dostum,
Şimdi anladığım kadarıyla tablona yeni kayıt girildiğinde otomatik olarak CreatedOn alanına kayıdın oluşturulma tarihi yazılsın istiyorsun. Kayıt güncellendiğinde ise ModifiedOn alanı güncellensin istiyorsun.
1. Yeni kayıt oluşturulduğunda CreatedOn alanına değer atanması için sınıfını aşağıdaki gibi düzenle. Sonra Sql Server' da default value kısmına getdate() yaz.
[DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime CreatedOn { get; set; }
2. Kayıt güncellendiğinde ModifiedOn alanına otomatik değer atanması içinse ya C# tarafında güncelleme işlemi yapıldığında sen değer ataması yapacaksın yada sql server tarafında trigger yazacaksın.
Örnek işini görür sanırım.
Hocam CodeFirst yaparken db kısmına gidipte bir alana deger girmek bana pek mantıklı gelmiyor. Zaten db de herhangi bir işlem yapmamak adına ben CodeFirst yapıyorum.
savechanges ovveride ile created olayını çözdüm. Update içinde dediğin gibi BLL de save e göndermeden önce değişikligi yapıyorum.