我试图使用实体框架作为 dao 将我的应用程序封装成三层。但我认为这是不可能的!因此,我开始在控制器中使用我的 DbSet 并执行以下操作:
var product = new Product();
product.Name = "product name";
db.Product.Add(product);
db.SaveChanges();
但是现在我没有 BL 层,那么,如何设置观察者在 SaveChanges() 之后发送电子邮件?
我试图使用实体框架作为 dao 将我的应用程序封装成三层。但我认为这是不可能的!因此,我开始在控制器中使用我的 DbSet 并执行以下操作:
var product = new Product();
product.Name = "product name";
db.Product.Add(product);
db.SaveChanges();
但是现在我没有 BL 层,那么,如何设置观察者在 SaveChanges() 之后发送电子邮件?
你可以覆盖saveChanegs
你的 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();
}
}
但是在 DBContext 中这样做并不是一个好主意,因为这不是 DbContext 应该做的。发送电子邮件涉及一些业务逻辑,如果您可以将其放在业务层而不是数据访问逻辑中,那就更好了。