modelBuilder.Query()被脚手架覆盖

时间:2019-10-23 20:02:29

标签: c# asp.net-core-mvc entity-framework-core

我有一个带有Entity Framework Core(数据库优先)的MVC Core(2.2)应用程序。我使用Scaffold-DbContext语句从数据库生成我的模型类。现在,除了表之外,我还需要从sql视图获取数据。我是通过手动将以下内容添加到数据库上下文类的OnModelCreating()来实现的:

modelBuilder.Query<SomeModel>().ToView("vwSomeView");

当我需要在数据库架构中进行更改(更新)时,我运行Scaffold-DbContext,上面的代码将被覆盖并消失。有什么解决办法吗?

1 个答案:

答案 0 :(得分:1)

您可以创建DbContext类的局部类。在该局部类中,您可以定义自己的OnModelCreating()

protected void OnModelCreating(ModelBuilder... )
{
    modelBuilder.Query<SomeModel>().ToView("vwSomeView");
    OnModelCreatingBase(modelBuilder);
}

在脚手架类中,您需要将OnModelCreating重命名为OnModelCreatingBase

每次您对实体进行脚手架时,仍然需要进行手动工作,但是运行生成器后会出现编译时错误,因为OnModelCreating被声明了两次。这比您否则会遇到的运行时错误更可取。