Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stored procedures 如何在asp.net内核中使用具有样板架构的存储过程?_Stored Procedures_Asp.net Core_Code First_Aspnetboilerplate - Fatal编程技术网

Stored procedures 如何在asp.net内核中使用具有样板架构的存储过程?

Stored procedures 如何在asp.net内核中使用具有样板架构的存储过程?,stored-procedures,asp.net-core,code-first,aspnetboilerplate,Stored Procedures,Asp.net Core,Code First,Aspnetboilerplate,我正在使用asp.net核心应用程序和abp(asp.net样板文件)框架。我想使用存储过程来获取数据,并在这个代码优先的体系结构中实现CRUD操作。这样做的最佳方式是什么 提前谢谢 下面是一个向存储过程发送参数以删除用户的示例: public async Task DeleteUser(EntityDto input) { await Context.Database.ExecuteSqlCommandAsync( "EXEC DeleteUserById @id",

我正在使用asp.net核心应用程序和abp(asp.net样板文件)框架。我想使用存储过程来获取数据,并在这个代码优先的体系结构中实现CRUD操作。这样做的最佳方式是什么

提前谢谢

下面是一个向存储过程发送参数以删除用户的示例:

public async Task DeleteUser(EntityDto input) { await Context.Database.ExecuteSqlCommandAsync( "EXEC DeleteUserById @id", default(CancellationToken), new SqlParameter("id", input.Id) ); } 公共异步任务DeleteUser(EntityDto输入) { 等待Context.Database.ExecuteSqlCommandAsync( “EXEC DeleteUserById@id”, 默认(取消令牌), 新的SqlParameter(“id”,input.id) ); } 见:

源代码发布在Github上:

下面是一个向存储过程发送参数以删除用户的示例:

public async Task DeleteUser(EntityDto input) { await Context.Database.ExecuteSqlCommandAsync( "EXEC DeleteUserById @id", default(CancellationToken), new SqlParameter("id", input.Id) ); } 公共异步任务DeleteUser(EntityDto输入) { 等待Context.Database.ExecuteSqlCommandAsync( “EXEC DeleteUserById@id”, 默认(取消令牌), 新的SqlParameter(“id”,input.id) ); } 见:


源代码发布在Github上:

创建自定义存储库,这样您就可以访问dbcontext对象并使用此上下文执行sql查询。我在自定义存储库中创建了一些帮助器方法,希望它能帮助您:

 /// <summary>
 /// Map data from datareader to list object
 /// </summary>
 private List<T> MapToList<T>(DbDataReader reader)
        {
            var result = new List<T>();
            if (reader.HasRows)
            {
                var props = typeof(T).GetRuntimeProperties();
                var colMapping = reader.GetColumnSchema().Where(x => props.Any(p => p.Name.Equals(x.ColumnName, StringComparison.OrdinalIgnoreCase))).ToDictionary(key => key.ColumnName.ToLower());

                while (reader.Read())
                {
                    var item = Activator.CreateInstance<T>();
                    foreach (var prop in props)
                    {
                        var propValue = reader.GetValue(colMapping[prop.Name.ToLower()].ColumnOrdinal.Value);
                        prop.SetValue(item, propValue == DBNull.Value ? null : propValue);
                    }
                    result.Add(item);
                }
            }
            return result;
        }
//
///将数据从datareader映射到列表对象
/// 
私有列表映射列表(DbDataReader)
{
var result=新列表();
if(reader.HasRows)
{
var props=typeof(T).GetRuntimeProperties();
var colMapping=reader.GetColumnSchema().Where(x=>props.Any(p=>p.Name.Equals(x.ColumnName,StringComparison.OrdinalIgnoreCase)).ToDictionary(key=>key.ColumnName.ToLower());
while(reader.Read())
{
var item=Activator.CreateInstance();
foreach(道具中的var道具)
{
var propValue=reader.GetValue(colMapping[prop.Name.ToLower()].ColumnOrdinal.Value);
prop.SetValue(项,propValue==DBNull.Value?null:propValue);
}
结果.添加(项目);
}
}
返回结果;
}

//
///执行命令返回空结果
/// 
public int ExecuteSqlCommand(字符串sqlCommand,Dictionary@params)
{
List sqlParams=new List();
foreach(@params中的变量项)
{
如果(item.Value!=null)
添加(新的SqlParameter(item.Key,item.Value));
其他的
Add(新的SqlParameter(item.Key,DBNull.Value));
}
如果(@params.Count>0)
sqlCommand+=“”;
sqlCommand+=String.Join(“,”,@params.Select(p=>p.Key));
返回Context.Database.ExecuteSqlCommand(sqlCommand,sqlParams.ToArray());
}

//
///执行存储过程返回一组行
/// 
public IEnumerable ExecuteStoreProcedureWithRowsResult(字符串名称,Dictionary@params),其中TResult:class
{
//修复异常:当分配给该命令的连接处于挂起的本地事务中时,ExecuteReader要求该命令具有事务。该命令的事务属性尚未初始化。
UnitOfWorkManager.Current.Options.IsTransaction=false;
使用(var命令=Context.Database.GetDbConnection().CreateCommand())
{
var result=新列表();
字符串sqlCmd=string.Format(“{0}”,名称);
if(command.Connection.State!=System.Data.ConnectionState.Open)
command.Connection.Open();
尝试
{
foreach(@params中的变量项)
{
如果(item.Value!=null)
添加(新的SqlParameter(item.Key,item.Value));
其他的
Add(新的SqlParameter(item.Key,DBNull.Value));
command.CommandText=sqlCmd;
command.CommandType=System.Data.CommandType.StoredProcess;
使用(var reader=command.ExecuteReader())
{
结果=地图列表(读取器);
}
}
}
捕获(例外情况除外)
{
掷骰子;
}
最后
{
command.Connection.Close();
}
返回结果;
}
}

在application service中,插入自定义存储库,并可以调用存储过程,如:

var @params = new Dictionary<string, object>();
@params.Add("Id", 1);
var result = _customRepository.ExecuteStoredProcedureWithRowsResult<UserResult>("sp_getUsers", @params);
var@params=newdictionary();
@参数添加(“Id”,1);
var result=_customRepository.ExecuteStoredProcedureWithRowsResult(“sp_getUsers”,@params);

创建自定义存储库,这样您就可以访问dbcontext对象并使用此上下文执行sql查询。我在自定义存储库中创建了一些帮助器方法,希望它能帮助您:

 /// <summary>
 /// Map data from datareader to list object
 /// </summary>
 private List<T> MapToList<T>(DbDataReader reader)
        {
            var result = new List<T>();
            if (reader.HasRows)
            {
                var props = typeof(T).GetRuntimeProperties();
                var colMapping = reader.GetColumnSchema().Where(x => props.Any(p => p.Name.Equals(x.ColumnName, StringComparison.OrdinalIgnoreCase))).ToDictionary(key => key.ColumnName.ToLower());

                while (reader.Read())
                {
                    var item = Activator.CreateInstance<T>();
                    foreach (var prop in props)
                    {
                        var propValue = reader.GetValue(colMapping[prop.Name.ToLower()].ColumnOrdinal.Value);
                        prop.SetValue(item, propValue == DBNull.Value ? null : propValue);
                    }
                    result.Add(item);
                }
            }
            return result;
        }
//
///将数据从datareader映射到列表对象
/// 
私有列表映射列表(DbDataReader)
{
var result=新列表();
if(reader.HasRows)
{
var props=typeof(T).GetRuntimeProperties();
var colMapping=reader.GetColumnSchema().Where(x=>props.Any(p=>p.Name.Equals(x.ColumnName,StringComparison.OrdinalIgnoreCase)).ToDictionary(key=>key.ColumnName.ToLower());
while(reader.Read())
{
var item=Activator.CreateInstance();
foreach(道具中的var道具)
{
var propValue=reader.GetValue(colMapping[prop.Name.To