2016-09-19 305 views
6

我重写OnModelCreating,并在方法有行base.OnModelCreating(modelBuilder);是base.OnModelCreating(modelBuilder)必要的吗?

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
} 

看代码样本,并就如何实现这一手册,我得到困惑,还判定是否我需要与否。有时它在那里,有时不在。有时在方法开始时,其他时间结束。

我该怎么处理它?

回答

3

按照documentation,如果你直接从DbContext类继承,也没关系:

该方法被调用时的推导的情境模型已被初始化,但该模型已被前锁定并用于初始化上下文。 此方法的默认实现不会执行任何操作,但可以在派生类中重写它,以便模型可以在锁定之前进一步配置。

换句话说,通过定义既然是什么都不做,呼吁base.OnModelCreating是没有必要的,但在同一时间,如果所谓的不会伤害 - 这就是为什么有时它的存在,有时没有。有时在方法开始时,其他时间结束。

+0

我明白了。尽管如此,为什么它在它什么都不做时称之为?我的意思是,我得到的重写给模型构建器,我们可以进一步配置。但为什么打电话给基地?换句话说,我们传递给modelBuilder会发生什么。听起来都是这样......无用的:-) –

+0

这就是要点。当你有一个基本的'virtual'方法时,必须有一些文档解释当你覆盖它的时候调用这个方法的需求,就像你需要调用它,如果你需要在开始时或者在结束。这里的文档声明该方法什么都不做,所以没有要求 - 如果你愿意,或者根本不能调用它,你可以在任何地方调用它。一旦你知道它根据定义**什么也不做,你可能不会说它:) –

2

这里说什么... Pawel Kadluczka - MSFT

目前,它其实并不重要。 OnModelCreating和Seed 方法在其基类中都没有任何实现(即 函数的主体为空)。因此调用 基类基本上是没有操作的。我不认为有任何计划 改变它(特别是种子的方法 - 我们怎么会知道放什么数据 在数据库中)

一般保护方法可以在基地 类的一些执行情况。在这种情况下,这取决于开发人员是否从 这样的类中决定他/她是否想要利用基类中方法中提供的功能或不使用 。如果 开发人员认为他/她只想添加一些东西到基类中的方法所提供的功能中,他会将 称为此方法。否则,他/她不会调用 基类的方法,并且会在派生类的 方法中提供所有必需的功能。

参考:Link

+0

说一个人(不管是否是MSFT)真的没有关系。唯一重要的是**官方文档**(如果它是错误的,那么这是一个必须报告和修复的错误 - 显然这不是这种情况)。 –

+0

嗯..两者在这里是一样的:D @IvanStoev – Sampath