You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Minimal API中AddScoped报CS0311错误,求助排查解决

问题根源与解决方案

错误原因

不是因为你在record里没定义ShowCodeNavigation、Entries2s和UserRatings这三个属性,核心问题是命名冲突:
你在Program.cs里定义了一个内部的Show1 record,而数据库Scaffold生成的实体类也叫Show1(且实现了IShow1接口)。当你写builder.Services.AddScoped<IShow1, Show1>()时,编译器默认匹配的是当前文件(Program.cs)里的Show1 record,而这个record并没有实现IShow1接口,因此抛出「不存在隐式引用转换」的错误。

验证方式

把注册代码改成指定实体类的完整命名空间,比如:

builder.Services.AddScoped<IShow1, BlazorMediaLibrary.API.Entities.Show1>();

如果改完错误消失,即可确认是命名冲突导致的问题。

解决办法

方法1:重命名record(推荐)

给Program.cs里的record起一个和实体类不同的名字,比如用作DTO的话可以叫ShowDto:

internal record ShowDto(int ShowId, int ShowCode, string EpisodeName,
                      string? Synopsis, DateTime? DateLastViewed, 
                      DateTime? OriginalBoardcastDate, TimeOnly? PlayTime, float? Rating);

从根源上避免命名冲突,后续代码也不会产生歧义。

方法2:明确指定实体类的命名空间

如果不想修改名字,就在注册服务时明确写出实体类的完整命名空间,消除编译器的歧义:

builder.Services.AddScoped<IShow1, BlazorMediaLibrary.API.Entities.Show1>();

额外提示

如果这个record是用作数据传输对象(DTO)的,建议和实体类保持命名区分——实体类对应数据库表,DTO对应API的请求/响应模型,这样不仅能避免编译错误,还能让代码职责划分更清晰。

内容的提问来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:27:23