使用存储过程时出现 ASP.Net Core 3.1 MVC 错误
Posted
技术标签:
【中文标题】使用存储过程时出现 ASP.Net Core 3.1 MVC 错误【英文标题】:ASP.Net Core 3.1 MVC Error while using stored procedures 【发布时间】:2021-08-26 15:09:47 【问题描述】:客户端希望通过存储过程完成与数据库的所有通信。要在 ASP 中执行此操作,我使用 FromSqlRaw,如下所示:
_context.Visit.FromSqlRaw("exec VisitApi_RecordVisit @User", userParam)
存储过程完成其工作并记录访问。但是每次触发时都会在控制台中抛出错误:
System.InvalidOperationException: The required column 'Id' was not present in the results of a 'FromSql' operation.
在研究这个错误时,我发现这个错误是因为它正在记录的表有一个主键。要解决此问题,我必须删除主键列,然后将其添加回来,并将“身份规范”设置为“否”。我也尝试添加 .HasNoKey();到表并尝试更新数据库。但是,当我这样做时,它告诉我需要删除该列并重新添加它。问题是已经记录了大约 200,000 次访问,我不想丢失已经绑定到每一行的 ID。有什么方法可以在不删除列或删除现有数据的情况下消除此错误?
【问题讨论】:
为什么选择 Entity.FromSqlRaw() 来运行任意 Sql proc? 使用 context.Database.ExecuteSqlCommand("EXEC AddCategory @CategoryName", name); 【参考方案1】:您也可以使用:
using(var context = new SampleContext())
var name = new SqlParameter("@CategoryName", "Test");
context.Database.ExecuteSqlCommand("EXEC AddCategory @CategoryName", name);
(取自https://www.learnentityframeworkcore.com/raw-sql#database.executesqlcommand)
文档:
https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.dbcontext.database?view=efcore-3.1
https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.relationaldatabasefacadeextensions.executesqlcommand?view=efcore-3.1
【讨论】:
在这种情况下,'new SampleContext()' 会是什么? 您的 DbContext。如果它已经创建/取自 DI,则无需再次创建。以上是关于使用存储过程时出现 ASP.Net Core 3.1 MVC 错误的主要内容,如果未能解决你的问题,请参考以下文章
[ASP.NET Core Web应用上使用个人用户帐户存储在应用程序中的Postman模拟登录时出现400错误请求错误
在 ASP.NET core 3.0 中,当我应用 except() 方法时出现以下异常
Angular 8 使用 ASP NET Core 3.1 Web Api 时出现 CORS 策略问题