【问题标题】:Entity Framework 7 FromSql stored procedure return valueEntity Framework 7 FromSql 存储过程返回值
【发布时间】:2016-03-15 02:05:56
【问题描述】:

我正在尝试使用 Entity Framework 7 中的新 FromSql 命令返回一个值。如果一切顺利,我的存储过程返回值 0,如果发生错误,则返回 1。

例如使用FromSqlDbSet 我们可以这样做

_dbContext.ExampleEntity.FromSql('someSproc', 'param')

你将如何从中得到 0 或 1 的标量返回值?

【问题讨论】:

    标签: c# .net entity-framework-core


    【解决方案1】:

    看起来存储过程支持是still on the backlog

    这是您可以使用_dbContext.ExecuteStoredProcedure("someSproc", "param"); 调用的示例扩展方法。

    public static class DbContextExtension 
    {
        public static int ExecuteStoredProcedure(this DbContext context, string name, string parameter)
        {
            var command = context.Database.GetDbConnection().CreateCommand();
            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = name;
            var param = command.CreateParameter();
            param.ParameterName = "@p0";
            param.Value = parameter;
            command.Parameters.Add(param);
            return (int)command.ExecuteScalar();
        }
    }
    

    【讨论】:

    • 嗨,斯塔福德,这看起来很符合我的需要。问题,您首先如何获取/实例化上下文以便能够调用上面的扩展方法?
    • @mattpm 取决于您的应用程序的设置方式。从这里开始; docs.microsoft.com/en-us/ef/core/miscellaneous/…
    • 这对我不起作用 - 我得到“ExecuteScalar 需要一个打开且可用的连接。连接的当前状态已关闭。”为了让它工作,我必须显式打开连接,如此处所示 - stackoverflow.com/a/39543702/432085。我正在通过 ASP.Net Core API 中的 Startup.cs 注入我的 DbContext,并且我对其他 DbContext 操作没有任何问题。很想知道你是如何做到这一点的。
    猜你喜欢
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多