0

我试图将我的应用程序用实体框架封装成三层。 但我认为这是不可能的! 于是,我开始使用的控制器我DbSet和做这样的事情:SaveChanges后发送电子邮件

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

但现在我没有一个BL层,所以,我怎么能设置一个观察者的SaveChanges后发送电子邮件()?

+0

SaveChanges方法中是否存在任何提交更改回调参数?如果是这样,你的观察员在那里。 – lionheart

+0

@ apoc29对不起,我不明白。 – MuriloKunze

+2

使用实体框架从我的数据访问层中分离出我的业务逻辑层我使用存储库模式,Heres在一些我使用一些示例3层代码编写的信息中包含一些信息:http://blog.staticvoid.co.nz/2011 /10/staticvoid-repository-pattern-nuget.html –

回答

0

您可以在自己的DbContext

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(); 
     } 

    } 

覆盖saveChanegs但它不是一个好主意,这样做在的DbContext因为这不是什么的DbContext应该做的。发送电子邮件涉及一些业务逻辑,如果您可以在业务层中使用它,而不是数据访问逻辑,则会更好。

+0

但是我必须为每个新的观察者插入一个'if',对吗? – MuriloKunze

+0

对于每个新的观察者,“插入”if是什么意思? –

+0

假设我有20个班,但只有2个班会在保存后发送电子邮件。所以我需要在SaveChanges中知道我应该发送还是不发送。 – MuriloKunze