当多个 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 查询