【问题标题】:Exec Procedure Mysql with EF net core带有 EF 网络核心的执行过程 Mysql
【发布时间】: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 并为现有密钥使用更新。
  • 请更新存储过程。

标签: c# mysql entity-framework asp.net-core stored-procedures


【解决方案1】:

在这种情况下我会做什么来查看 DbContext 级别发生了什么,我将启用如下所示的日志记录,

  1. 在您的 dbcontext 中添加如下日志记录,

    public static readonly ILoggerFactory loggerFactory = new LoggerFactory(new[] { 新的 ConsoleLoggerProvider((_, __) => true, true) });

  2. 受保护的覆盖无效 OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseLoggerFactory(loggerFactory) .EnableSensitiveDataLogging()
    .UseSqlServer(@"连接字符串"); }

  3. 然后你会看到每一行都登录控制台。

P.S : 请安装 Microsoft.Extensions.Loggin.Console nuget 包

谢谢

【讨论】:

    【解决方案2】:

    非常感谢大家的回答,不过我是这样解决的

    var result = context.Database.ExecuteSqlRaw(store_pocedure, queryParams);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-03
      • 2022-01-12
      • 2021-11-06
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2018-11-18
      • 2020-10-16
      相关资源
      最近更新 更多