Entity framework 保存更改后发送电子邮件

Entity framework 保存更改后发送电子邮件,entity-framework,entity-framework-4,entity-framework-4.1,Entity Framework,Entity Framework 4,Entity Framework 4.1,我试图使用实体框架作为dao将我的应用程序封装成三层。 但我明白这是不可能的!! 因此,我开始在控制器中使用我的DbSet并执行以下操作: var product = new Product(); product.Name = "product name"; db.Product.Add(product); db.SaveChanges(); 但是现在我没有BL层,那么,如何设置观察员在SaveChanges()之后发送电子邮件呢?您可以覆盖DBContext上的saveChanegs pu

我试图使用实体框架作为dao将我的应用程序封装成三层。 但我明白这是不可能的!! 因此,我开始在控制器中使用我的DbSet并执行以下操作:

var product = new Product();
product.Name = "product name";
db.Product.Add(product);
db.SaveChanges();

但是现在我没有BL层,那么,如何设置观察员在SaveChanges()之后发送电子邮件呢?

您可以覆盖DBContext上的
saveChanegs

 public class YourDbContext:DBContext
    {

       public override int SaveChanges(){
         foreach(var entry in ChangeTracker.Entries())
         {
           var entity = entry.Entity;
           if (entity is Entity1 or entity is Entity2)
           {
             //send email
           }
         }
         base.SaveChanges();
      }

   }

但是在DBContext中这样做不是一个好主意,因为DBContext不应该这样做。发送电子邮件涉及一些业务逻辑,最好将其放在业务层,而不是数据访问逻辑中。

SaveChanges方法中是否有提交更改回调参数?如果是这样的话,你的观察者在那里。@apoc29对不起,我不明白。要用实体框架将我的业务逻辑层与我的数据访问层分开,我使用存储库模式,下面是我用一些三层代码编写的示例的一些信息:我确实尝试了存储库,但我遇到了很多无法解决的问题。但是我必须为每个新观察者插入一个“如果”,不是吗?你说的
为每个新观察者插入一个“如果”
是什么意思?假设我有20个类,但保存后只有2个类会发送电子邮件。所以我需要知道在SaveChanges中我应该何时发送或不发送。