ASP.NET Core报CS1503错误:参数无法从long转换为int怎么解决
错误原因
报错本质是类型不匹配:你在IEmployeeService中定义的id参数为long类型,但你调用的_unitOfWork.EmployeeRepository下的EntityExists、GetById、Delete三个方法的入参都是int类型,C#不允许long到int的隐式转换,所以触发CS1503编译错误。
虽然你数据库id字段是bigint对应C#的long,但仓储层的方法参数、甚至可能实体类的Id属性没有同步修改为long,才会出现这个问题。
解决方案
优先选择第一种方案,彻底解决类型匹配问题:
- 方案一(生产环境推荐):同步修改仓储层的参数类型
找到IEmployeeRepository接口定义,将三个对应方法的入参从int改为long,同时同步修改其实现类的方法参数:
同时确认你的// 修改前的IEmployeeRepository示例 // bool EntityExists(int id); // Task<Employee> GetById(int id); // Task Delete(int id); // 修改后的定义 bool EntityExists(long id); Task<Employee> GetById(long id); Task Delete(long id);Employee实体类的Id属性已经设置为long类型,避免EF Core映射数据库bigint字段时出现类型不匹配问题。修改完成后编译报错会直接消失,也不会有后续id溢出的风险。 - 方案二(临时测试用,不推荐):强制类型转换
如果你确认业务中id的取值永远不会超过int的最大值(约21亿),可以在三处报错的位置强制转换参数类型:
该方案仅适合临时调试,正式环境使用会有id溢出导致的业务异常风险。return _unitOfWork.EmployeeRepository.EntityExists((int)id); return await _unitOfWork.EmployeeRepository.GetById((int)id); await _unitOfWork.EmployeeRepository.Delete((int)Id);
内容的提问来源于stack exchange,提问作者Olugbenga
相关产品推荐
相关产品推荐

