我在数据库中有一个名为“ 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视图,是否有人知道更好的方法来组合多个表并添加“位置”列以跟踪数据源自何处的表?任何帮助将不胜感激!