2011-08-12 16 views
10

Bazı EF nesnelerine ekleme ve güncelleme olaylarına bazı mantık eklemek istiyorum. Kategori nesnesine sahip bir MVC uygulaması var ve bu özellik name özelliğinin yüklenmiş bir versiyonu olan bir özelliğe sahip. Benim slugify mantık oldukça ayrıntılı çünküEF kodunda Insert/Update mantığı ilk olarak

public class Category 
{ 

    public string Name { get; set; } 
    public string UrlName{ get; set; } 
} 

Ben sadece ekleme ve güncelleme olaylara URLNAME özelliğini ayarlamak istiyorum.

İçeriğin kendisinde SaveChanges() işlevinin içine biraz mantık ekleyebileceğimin farkındayım, ancak bu kodu kodun kendisine daha yakın koymak istiyorum.

Önce EF kodunu kullanarak böyle bir şeyi başarmanın bir yolu var mı?

cevap

21

Sen yöntemlerle bir taban sınıfı kurulum eki önce aradı ve güncellemek üzere edebilirsiniz DbContext

public override int SaveChanges() 
    { 
     var changedEntities = ChangeTracker.Entries(); 

     foreach (var changedEntity in changedEntities) 
     { 
      if (changedEntity.Entity is Entity) 
      { 
       var entity = (Entity)changedEntity.Entity; 

       switch (changedEntity.State) 
       { 
        case EntityState.Added: 
         entity.OnBeforeInsert(); 
         break; 

        case EntityState.Modified: 
         entity.OnBeforeUpdate(); 
         break; 

       } 
      } 
     } 

     return base.SaveChanges(); 
    } 
+1

o miras zorlar gibi bu kötü bir çözümdür içinde Sonra

public abstract class Entity { public virtual void OnBeforeInsert(){} public virtual void OnBeforeUpdate(){} } public class Category : Entity { public string Name { get; set; } public string UrlName{ get; set; } public override void OnBeforeInsert() { //ur logic } } 

. Arayüz kullanımı daha iyi bir yol olurdu. – Migol

+1

@Migol yanıtı, geri arama mekanizmasını nasıl uygulayabileceğinizi gösterir. Bunu nasıl uyguladığınız size kalmış. – Eranga

+1

@Migol, cevabı iyidir çünkü arayüzleri kullanmak, yöntemlerin uygulanmasını zorlar. – orourkedd

1

Hayır, böyle bir uzatma noktası yok çünkü varlığınız POCO'dur - bu durumun sürekliliğinin farkında değil. Bu mantık, sürekliliğin farkında olan veri erişim katmanında tetiklenmelidir. DbContext API sadece SaveChanges'u geçersiz kılar.

Kuruluşunuzdaki özel olayları veya yöntemleri ortaya çıkarabilir ve SaveChanges numaralı telefondan işlerken arama yapabilirsiniz.

İlgili konular