Entity Framework Core ToView 仍在迁移中创建表

问题描述 投票:0回答:1

这全部适用于 Entity Framework Core v8.0.10、.NET 8 和 Oracle 19.0.0。

我的数据库中有这个视图:

CREATE VIEW VW_TESTVIEW 
AS
    SELECT 'THIS IS A TEST' AS EXAMPLE
    FROM DUAL;

这仅返回一条记录,其中包含名为

EXAMPLE
的列,其内容为
THIS IS A TEST
:

A screenshot showing the view working in the database.

在我的 .NET 8 应用程序中,我添加了此类:

public class VW_TestView
{
    public string Example { get; set; }
}

在我的

DbContext.OnModelCreating
方法中,我添加了以下代码:

modelBuilder
    .Entity<VW_TestView>(x =>
    {
        x.HasNoKey();
        x.ToView("VW_TESTVIEW");
    });

此外,我还添加了以下属性:

DbContext

public virtual DbSet<VW_TestView> TestViews { get; set; }

当我运行

Add-Migration ExampleView
时,生成的
Migration.Up
方法具有以下
CreateTable
:

migrationBuilder.CreateTable(
    name: "VW_TESTVIEW",
    columns: table => new
    {
        EXAMPLE = table.Column<string>(type: "NVARCHAR2(2000)", nullable: false)
    },
    constraints: table =>
    {
    });

因此,应用此迁移会失败,因为已存在同名的对象。

如果我忽略模型中的实体,我仍然无法使用

TestViews
DbSet,因为它返回此错误:

System.InvalidOperationException:无法为“VW_TestView”创建 DbSet,因为此类型未包含在上下文的模型中

c# .net-core entity-framework-core entity-framework-migrations
1个回答
0
投票

使用 EF Core 使用表示数据库视图的类的正确方法是什么?

我认为你很好地表达了观点。

为什么 ToView 不做它所说的事情? (“配置针对关系数据库时实体类型映射到的视图。”)

它实际上做了应该做的事情。

我认为对你有用的是你可以删除migrationBuilder.CreateTable(..以在Migration.Up中创建视图

如果您不喜欢这样做,请不要在迁移“向上”中指定视图的创建...

© www.soinside.com 2019 - 2024. All rights reserved.