带有 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的主要内容,如果未能解决你的问题,请参考以下文章

MySQL——存储过程

存储过程在 ef 核心中返回旧值

MVC5加EF6 执行存储过程 获取表

EF ef Database.SqlQuery 内部回滚到执行的存储过程

EF执行SQL语句和存储过程

坑到了,EF执行带事物的存储过程