带有 EF 网络核心的执行过程 Mysql
Posted
技术标签:
【中文标题】带有 EF 网络核心的执行过程 Mysql【英文标题】:Exec Procedure Mysql with EF net core 【发布时间】:2021-08-30 22:47:53 【问题描述】:我尝试使用以下函数执行存储过程,但表没有更新,也没有显示错误,您能帮帮我吗
public static void UpdateShareDate(string Sharepath, string ShareDate, int TransactionID, int Clientid)
try
using (var context = new AppDBContext())
mysqlConnector.MySqlParameter[] queryParams = new MySqlConnector.MySqlParameter[]
new MySqlConnector.MySqlParameter("@p1", Sharepath),
new MySqlConnector.MySqlParameter("@p2", ShareDate),
new MySqlConnector.MySqlParameter("@p3", TransactionID),
new MySqlConnector.MySqlParameter("@p4", Clientid)
;
string store_pocedure = "call MediaFile_Update(@p1,@p2,@p3,@p4)";
var result = context.DBSetMediaFiles.FromSqlRaw(store_pocedure, queryParams);
catch (Exception ex)
throw;
【问题讨论】:
请分享MediaFile_Update
。
您实际上并没有执行查询。在FromSqlRaw(...)
之后添加.ToList()
数据库有主键吗?如果数据库中存在主键并且该键已经在数据库中,则更新将不起作用。然后,您需要对新密钥使用 Insert 并为现有密钥使用更新。
请更新存储过程。
【参考方案1】:
在这种情况下我会做什么来查看 DbContext 级别发生了什么,我将启用如下所示的日志记录,
在您的 dbcontext 中添加如下日志记录,
public static readonly ILoggerFactory loggerFactory = new LoggerFactory(new[] 新的 ConsoleLoggerProvider((_, __) => true, true) );
受保护的覆盖无效 OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.UseLoggerFactory(loggerFactory) .EnableSensitiveDataLogging() .UseSqlServer(@"连接字符串");
然后你会看到每一行都登录控制台。
P.S : 请安装 Microsoft.Extensions.Loggin.Console nuget 包
谢谢
【讨论】:
【参考方案2】:非常感谢大家的回答,不过我是这样解决的
var result = context.Database.ExecuteSqlRaw(store_pocedure, queryParams);
【讨论】:
以上是关于带有 EF 网络核心的执行过程 Mysql的主要内容,如果未能解决你的问题,请参考以下文章