【发布时间】:2017-03-16 18:25:46
【问题描述】:
首先,我有一个 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() 或者我有一个循环和堆栈溢出...
什么是好的解决方案?
【问题讨论】:
-
“我有一个循环和堆栈溢出......”什么?你的循环在哪里?或者你的意思是你有一个无尽的递归导致
StackOverflowException?无论如何,您的问题似乎是 XY 问题。你为什么要从SaveChanges内部打电话给SaveChanges?这似乎是一个破碎的设计。您不应该(也不能)指出在继承链中调用哪个方法,它总是是最派生的。做一些不同的事情会破坏 OOP 原则。
标签: c# entity-framework inheritance extension-methods