public MyObject SelectObj(Decimal? ID) { if (ID != null) { DataBaseContext con = new DataBaseContext(); return con.MyObjects.Include(r => r.MyObjectRelation).Single(r => r.ID == ID); } else return new MyObject(); } public void InsertObj(MyObject Obj) { DataBaseContext con = new DataBaseContext(); var a = con.MyObjects.Attach(Obj); con.Entry(a).State = EntityState.Added; con.SaveChanges(); } public void UpdateObj(MyObject Obj) { DataBaseContext con = new DataBaseContext(); var a = con.MyObjects.Attach(Obj); con.Entry(a).State = EntityState.Modified; con.SaveChanges(); } public void DeleteObj(MyObject Obj) { DataBaseContext con = new DataBaseContext(); var a = con.MyObjects.Attach(Obj); con.Entry(a).State = EntityState.Deleted; con.SaveChanges(); }
Burada dikkat edilmesi gereken bir unsur ilişkili tablonun verilerinin "eargerly loading" yaklaşımıyla yapılmasıdır. Bunun direk olarak CRUD kalitesine etkisi olmamakta birlikte tarafımca performans kaygısı sebebiyle bu yöntem kullanılmaktadır.
Aşağıdaki kod satırları nesne durumunu EF'ye tanıtmaktadır.
con.Entry(a).State = EntityState.Added; con.Entry(a).State = EntityState.Modified; con.Entry(a).State = EntityState.Deleted;
Bu satırlardan Added nesnenin yeni eklendiğini belirtmekte ve INSERT DML (Data Manipulation Language) komutunu ima etmekte, Modified nesnenin güncellendiğini ve UPDATE DML komutunu ima etmekte, Deleted ise nesnenin silindiğini ve DELETE DML komutunu ima etmektedir.
Direk nesne üzerinden yapılan durum belirtimleri nesnenin tüm propertyleri için geçerlidir. Örneğin Modified durumu sonucu oluşan SQL (Structured Query Language) tüm property'leri içerecektir. Eğer ilgili nesnenin belirli property'leri güncellenmek isteniyorsa aşağıdaki kod satırı kullanılmalıdır:
con.Entry(a).Property(r => r.MyProperty).EntityEntry.State = EntityState.Modified;
veya
con.Entry(a).Property(r => r.MyProperty).IsModified = true;
Burada MyProperty güncellenmiş olarak işaretlenmiş ve güncellemede sadece gösterilen property dikkate alınacaktır.
Bir diğer husus ise "using" kullanımıdır. "Context" nesneleri yüksek maliyetli nesneler oldukları için kaynakların çabuk bırakılması yararlı olacaktır. Bu yüzden "Context" nesnelerinin "using" bloğu kullanılarak kullanılması yararlı olacaktır.
Son olarak yukarıdaki işlemlerde nesne tanımlayıcısının yani "primary key" alanlarının kesinlikle tam olması şarttır.
Son olarak yukarıdaki işlemlerde nesne tanımlayıcısının yani "primary key" alanlarının kesinlikle tam olması şarttır.
çok teşekkür ederim
ReplyDelete