仅当我在代码中放置断点时,才能使用C#删除存储过程的参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅当我在代码中放置断点时,才能使用C#删除存储过程的参数相关的知识,希望对你有一定的参考价值。

我使用Entity Framework建立了数据库连接。我创建了多个存储过程,其中之一具有我的应用程序中需要的输出参数。

C#中的过程:

public virtual ObjectResult<Nullable<System.Guid>> AjouterProfesseur(string prenom, string nom, ObjectParameter identity)

        var prenomParameter = prenom != null ?
            new ObjectParameter("prenom", prenom) :
            new ObjectParameter("prenom", typeof(string));

        var nomParameter = nom != null ?
            new ObjectParameter("nom", nom) :
            new ObjectParameter("nom", typeof(string));

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<System.Guid>>("AjouterProfesseur", prenomParameter, nomParameter, identity);

要检索输出参数,我使用以下命令(这也是我必须放置断点并越过它才能使其起作用的地方):

public static Guid AddProfesseur(string prenom, string nom)

        using (ExamenProjetIntegrationEntities db = new ExamenProjetIntegrationEntities())
        
            ObjectParameter objParam = new ObjectParameter("identity", typeof(Guid));
            var resultToReturn = db.AjouterProfesseur(prenom, nom, objParam);
            return  Guid.Parse(objParam.Value.ToString());
        

然后我有一个业务层,它再次调用该方法:

public static Guid addProfesseur(string prenom, string nom)

        try
        
            var data = Data.AddProfesseur(prenom, nom);
            return data;
        
        catch (Exception e)
        
            var sqlex = e.InnerException as SqlException;

            if (sqlex != null)
            
                switch (sqlex.Number)
                
                    default:
                        throw new Exception(sqlex.Number + " - " + sqlex.Message);
                
            

            throw e;
        

最后在我的API控制器中,我使用以下语句:

var idProfesseur = BL.addProfesseur(professeur.prenom, professeur.nom);

我在ASP.NET MVC视图中使用ajax调用该方法。

没有人知道为什么会这样,我如何解决这个问题?

编辑:

以下链接正是我正在执行的操作:Executing SQL Stored Procedure with Output Parameter from Entity Framework。但是我的问题是,我需要逐步检查它才能使它正常工作

答案

使用基础SqlParameter将需要.Direction = ParameterDirection.OutputObjectParameter没有等效设置。相反,我相信参数方向是在您的模型中配置的。

另一答案

输出参数在完全读取返回结果或关闭基础DbDataReader之前不可用。

请参见ParametersObjectContext.ExecuteFunction部分和this section on DataReaders的第二句

您可以通过使用LINQ评估结果来强制执行此操作。

public static Guid AddProfesseur(string prenom, string nom)

        using (ExamenProjetIntegrationEntities db = new ExamenProjetIntegrationEntities())
        
            ObjectParameter objParam = new ObjectParameter("identity", typeof(Guid));
            var resultToReturn = db.AjouterProfesseur(prenom, nom, objParam).Count();
            return  Guid.Parse(objParam.Value.ToString());
        

您还可以使用.ToList().FirstOrDefault()或您希望读取基础结果的任何方法。

以上是关于仅当我在代码中放置断点时,才能使用C#删除存储过程的参数的主要内容,如果未能解决你的问题,请参考以下文章

Clion:调试到 cpp 类

Xamarin Forms UWP - 无法调试共享代码

在 Visual Studio 中,我可以在只有调试符号的代码中放置断点吗?

等待批量插入存储过程完成

发布表单时收到 HTTP ERROR 400

仅当我使用var_dump或echo而不使用调试器断点时,变量才会被设置