首先,我有一个DbContext类的扩展方法,用日志保存:
public static int SaveChangesWithLogging(this DbContext context, NLog.Logger logger)
{
//logging
//[...]
return context.SaveChanges();
}
然后,我有一个继承自dbcontext的类,我覆盖了SaveChanges()
public class ChildDbContext : DbContext
{
public override int SaveChanges()
{
//other stuff
//[...]
//doesn't work, no definition for SaveChangesWithLogging (extension method not found, why ?)
return base.SaveChangesWithLogging();
//doesn't work, loop on SaveChanges by extension method and stack overflow as a result
return base.SaveChangesWithLogging();
}
}
我想调用基本DbContext类的SaveChanges(),但它调用ChildDbContext的SaveChanges()或者我有一个循环和堆栈溢出...
什么是好的解决方案?
答案 0 :(得分:1)
扩展方法隐藏真正的问题是你试图从外部调用重写方法,这是不可能的。由于实际对象是Button{
...
width: myTextField.width
}
,因此被覆盖的方法将由ChildDbContext
调用。没有办法从SaveChangesWithLogging
内调用“基础”方法 - 即使你在方法之前投射它也是如此。
我建议重新安排你的调用层次结构,以便可以从派生方法调用基本方法,或者使用非虚方法,以便可以直接调用基本方法。
答案 1 :(得分:0)
最后,我为dbcontext使用了一个包装器。