【发布时间】:2022-01-01 22:26:27
【问题描述】:
问题
我有两个有关系的表;我可以毫无问题地从一个表或另一个表中获取我想要的任何数据,但我无法同时从两个表中获取数据。
环境:
- Visual Studio 2022
- 在 .NET 6.0 上运行的 Webassembly Blazor 项目
- Nuget 包
- Microsoft.EntityFrameworkCore 6.0.1
- Pomelo.EntityFrameworkCore.MySql
- 数据库 MariaDb 13.3.31
我构建数据环境的方式:
使用 PhpMyAdmin,我创建了 2 个具有关系的表。
然后我在包管理器控制台中启动了脚手架命令:
Scaffold-DbContext "Server=192.168.0.22;user=MyUser;Password=MyPassword;Database=MyDb;"
Pomelo.EntityFrameworkCore.MySql
-OutputDir Models -Context "MySqlstockDataContext" -DataAnnotations
之后,我使用 VS2022 命令“添加新控制器”创建了控制器,并选择了“使用实体框架执行操作的 API 控制器”
我的模型,DbContext 和控制器是使用 VS 2022 的工具构建的,我没有为此编写任何代码。
数据库(一个简单的数据库,其中包含可以移动的文章(库存的输入或输出):
这是模型类“Articles”的生成代码:
Screenshot of model class Articles
这是模型类“Mouvements”的生成代码:
Screenshot of model class Mouvements
这是模型类“DbContext”的生成代码:
ArticlesController:
Screenshot of ArticlesController
运动控制器:
Screenshot of MouvementsController
剃刀页面:
Screenshot for Razor page displaying the data in browser
我已经尝试过的:
在这个剃须刀页面中,一行
<td>@mouvement.IdArticleNavigation.NomArticle</td>
即使在MouvementsController 也是问题,我用
return await _context.Mouvements
.Include(e => e.IdArticleNavigation.NomArticle)
.ToListAsync();
而不仅仅是
return await _context.Mouvements.ToListAsync();
为了让事情顺利进行,我想我应该这样写:
<td>@Mouvement. Articles.NomArticle</td>
在 Razor 页面和
return await _context.Mouvements
.Include(e => e.Articles.NomArticle)
.ToListAsync();
在 MouvementsController 中。
但智能感知并没有给我这种可能性。智能感知为我提供链接文章和运动的唯一内容是Include.IdArticleNavigation.NomArticle,但这不起作用。
这是我在浏览器控制台看到的错误:
发生未处理的错误
在 VS 2022 控制台中,错误提示
“e.IdArticleNavigation.NomArticle”在包含中无效。
我必须承认我是 .NET Core、C#、Visual Studio 的新手,我只是出于爱好编写代码。所以,我在网上看到的所有例子对我来说都不是很清楚(复杂的开发者词汇!)
如果可能的话,希望有人能够帮助我一个简单的方法!
你好凯厄斯,
非常感谢这种快速而敏锐的反应,我认为这很好理解。但是,也许我不应该使用您的建议,因为我仍然无法查询这两个表。
在下面,当我尝试重现您建议的代码时,您可以看到我在 Intellisense 命题中的内容。
我们可以看到,没有来自“article”表的属性命题。
为了确保我的问题很清楚,让我告诉我我尝试得到的结果:我想获得“mouvement”表的所有属性和“nom_article”属性(以及其他属性)对应的“文章”表。在 SQL 中,我认为它对应于:SELECT * FROM mouvement INNER JOIN article ON mouvement.id_article = article.id_article; 这将允许最终获得显示如下表格的属性:
id_mvt|id 文章|type_mvt|Qte_mvt|date_mvt|nom_article
【问题讨论】:
-
请勿将代码发布为图片 - 在您的问题中使用适当的代码块。关注guidelines
-
您好 Quain,感谢您的建议。我在发布时已经尝试过了,但问题是发布代码的标记是 { } 并且代码本身有许多相同的标记(例如开始和结束一个方法)。所以贴出来的代码被分成了几个灰底白底,变得难以阅读。这是我的第一篇文章,我会努力改进的!最好的问候。
-
尝试将代码放在
```c#和```标记之间 - 这应该可以解决问题。更准确地说,第一行只是```C#,然后是几行代码,然后是单独的行```。 -
除了不发布屏幕截图之外,将您的代码缩减为重现问题的小型 sn-p。您可能会通过精简来找到解决方案,它可以帮助您找到问题所在,并且使问题更具可读性。
-
@Phil:如果每行都以 4 个空格开头,那么您将不会遇到白色/灰色问题。专业提示:在您的 IDE 中,选择代码,再次缩进(按 Tab),然后复制该代码。额外的缩进为您提供了所需的 4 个空格。如果您将缩进设置为 2 个空格而不是 4 个空格,那么显然您的代码会缩进两次。
标签: c# .net entity-framework-core blazor-webassembly