如何创建代码优先DbContext的视图?

时间:2018-08-14 19:41:01

标签: entity-framework

在数据库优先中,将视图添加到EDMX中相对容易。我们如何在Code-First中做到这一点?

我们可以在自定义迁移类中使用Code First创建视图。

public partial class AddNewView : DbMigration
{
    public override void Up()
    {
        Sql("CREATE VIEW [dbo].[NewView] AS ...");
    }

    public override void Down()
    {
        Sql("DROP VIEW dbo.[NewView]");
    }
}

但是我们如何在DbContext中访问视图?

对于表,我们可以将域模型添加到DbContext中并进行一些配置,

public virtual DbSet<Person> Persons { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new PersonConfiguration());
}

将视图添加到DbContext的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

感觉有点黑,但是我最终要做的是:

  • 使用代表您的视图的所有属性创建一个模型。
  • public virtual DbSet<TableName> TableNames { get; }添加到您的DbContext
  • 运行Add-Migration vwTableName

  • 从迁移中删除Up()Down()方法。

并添加视图创建/删除SQL脚本:

public override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql("CREATE VIEW [dbo].[NewView] AS ...");
}
public override void Down(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql("DROP VIEW dbo.[NewView]");
}