当多个 SQL 键时,来自实体框架的循环 SQL 查询返回第一行

Posted

技术标签:

【中文标题】当多个 SQL 键时,来自实体框架的循环 SQL 查询返回第一行【英文标题】:Looping SQL queries from Entity Framework returns the first row when multiple SQL keys 【发布时间】:2021-11-12 09:03:15 【问题描述】:

我有一个在使用 EF Core 之前从未遇到过的奇怪问题。

VismaContext vc = new VismaContext(Cfg.VismaCS);
List<OrdDocLn> list = vc.OrdDocLn.Where(x => x.OrdDocNo == 1333).ToList();
foreach (OrdDocLn o in list) 
    Log.Information($"o.DocLnNo o.Price");

返回这个

但是当我在 sql 中查询时,我得到了这个

所以 foreach 循环列出了所有行,但显示所有行的第一行的值

模型是这样的

我正在使用 Visual Studio 2022 和 EF Core 6 和 MSSQL

SQL 中的表有两个键,OrdDocNo 和 DocLnNo,我怀疑这需要在 DbContext 中以某种方式设置,但我不知道该怎么做。

这是 DbContext

这是 SQL 中的表

【问题讨论】:

【参考方案1】:

我找到了答案,我需要在DBContext中指定键

 protected override void OnModelCreating(ModelBuilder modelBuilder) 
        modelBuilder.Entity<OrdDocLn>().HasKey(c => new  c.OrdDocNo, c.DocLnNo );

【讨论】:

只是为你写同样的答案;)

以上是关于当多个 SQL 键时,来自实体框架的循环 SQL 查询返回第一行的主要内容,如果未能解决你的问题,请参考以下文章

Database.Log 不记录来自实体框架中的拦截器的附加 SQL

实体框架,如何将 IQueryable 与多个 where 转换为 SQL 一起使用?

在实体框架 C# 中使用 Lambda 编写多个 Sum() SQL 查询

使用 LINQ 和实体框架在一个 SQL 查询中从多个表中提取数据

实体框架中一个或多个实体的可空布尔属性验证失败

我们的 SQL 或实体框架中的错误?