EF Core:如何查询SQL视图 dbo.ViewTest

我在数据库中有一个名为“ dbo.Viewtest”的SQL视图。此视图合并了其他两个具有相同列类型的表的数据。该视图还添加了一个列,以显示数据源自哪个表。

这是SQL Server对象资源管理器中SQL视图的外观:

dbo.ViewTest

Id |类型内容|位置

1 | h1 |欢迎您!|主页

2 | p |登录|主页

3 | h2 |指南|主页

1 | h1 |信息|活动

2 | p |跟随活动

此视图由2个表创建,其中一个称为“ HomeContent”,另一个称为“ EventsContent”(因此位于位置列)。使用以下代码创建了视图:

protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.Sql("CREATE VIEW ViewTest AS " +
                "SELECT Id,Type,Content,'Home' location FROM HomeContent UNION ALL " +
                "SELECT Id,'Evenementen' FROM EvenementenContent");

        }

然后我添加了一个模型类,如下所示:

  [Table("ViewTest")]
    public class TestViewContent
    {
        [Key]
        public int Id { get; set; }
        public string Type { get; set; }
        public string Content { get; set; }
        public string Location { get; set; }
    }

最后,我将其添加到我的DbContext中:

 public DbSet<TestViewContent> TestViewContent { get; set; }

现在,这是事情开始崩溃的地方。当我尝试使用EF Core显示此SQL视图时,得到以下断开的输出:

Id |类型内容|位置

1 | h1 |欢迎您!|主页

2 | p |登录|主页

3 | h2 |指南|主页

1 | h1 |欢迎光临|主页

2 | p |登录|主页

您可以看到,无论出于什么原因,当我尝试显示SQL View时,应该显示“事件”表中的数据时,数据会“环回”。因此,无论出于何种原因,它只会显示主表中的数据。

我用于显示SQL视图的代码是:

 private readonly DbApplicationContext_context;

        public TestViewContentController(DbApplicationContext_context)
        {
            _context = context;
        }

   public async Task<IactionResult> Index()
        {
            return View(await _context.TestViewContent.ToListAsync());
        }

这里有人可以帮助我吗?如果无法显示SQL视图,是否有人知道更好的方法来组合多个表并添加“位置”列以跟踪数据源自何处的表?任何帮助将不胜感激!

bcp123 回答:EF Core:如何查询SQL视图 dbo.ViewTest

之所以会这样,是因为您将$(CurText)放在了[Key]属性上,但是当合并两个表时,IdVIEW列中产生了重复的值。 EF Core然后可能会说:“啊,再次有Id = 1,我已经有了那一行,所以我将重用它。”

有三种可能的修复方法:

(1)为VIEW定义一个单独的主键,该键可确保生成唯一值,然后在EF Core中将其用作{{1} }。

(2)保持VIEW不变,然后在EF Core中定义复合主键。请注意,EF Core不支持使用Id属性创建复合键,您需要使用use the Fluent API HasKey() function,在这种情况下,需要使用[Key][Key]属性。

(3),完全省略了Location,您可能实际上并不需要它,如此处的文档所述:Keyless Entity Types

本文链接:https://www.f2er.com/2733177.html

大家都在问