Last active
July 22, 2016 13:21
-
-
Save timdows/59b04f65f52af8eec5f0e86ee3d5a865 to your computer and use it in GitHub Desktop.
RawSqlExecute in ASP.NET Core with EntityFramework Core 1.0
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class RawSqlExecute | |
{ | |
/// <summary> | |
/// Plain text sql query to a list that can easaly be transformed to a json object | |
/// </summary> | |
/// <param name="dataContext"></param> | |
/// <param name="sql"></param> | |
/// <returns>Dynamic list</returns> | |
public static List<dynamic> GetDynamicResults( | |
DataContext dataContext, | |
string sql) | |
{ | |
using (var command = dataContext.Database.GetDbConnection().CreateCommand()) | |
{ | |
command.CommandText = sql; | |
if (command.Connection.State != ConnectionState.Open) | |
{ | |
command.Connection.Open(); | |
} | |
return GetRecords(command); | |
} | |
} | |
/// <summary> | |
/// Stored Procedure with SqlParameters to a list that can easaly be transformed to a json object | |
/// </summary> | |
/// <param name="dataContext"></param> | |
/// <param name="storedProcedureName"></param> | |
/// <param name="sqlParameters"></param> | |
/// <returns>Dynamic list</returns> | |
public static List<dynamic> GetDynamicResults( | |
DataContext dataContext, | |
string storedProcedureName, | |
List<SqlParameter> sqlParameters) | |
{ | |
using (var command = dataContext.Database.GetDbConnection().CreateCommand()) | |
{ | |
command.CommandText = storedProcedureName; | |
command.CommandType = CommandType.StoredProcedure; | |
command.Parameters.AddRange(sqlParameters.ToArray()); | |
if (command.Connection.State != ConnectionState.Open) | |
{ | |
command.Connection.Open(); | |
} | |
return GetRecords(command); | |
} | |
} | |
private static List<dynamic> GetRecords(DbCommand command) | |
{ | |
var records = new List<dynamic>(); | |
using (var dataReader = command.ExecuteReader()) | |
{ | |
while (dataReader.Read()) | |
{ | |
var dataRow = new ExpandoObject() as IDictionary<string, object>; | |
for (var i = 0; i < dataReader.FieldCount; i++) | |
{ | |
var name = dataReader.GetName(i); | |
var value = dataReader[i]?.ToString(); | |
dataRow.Add(name, value); | |
} | |
records.Add((ExpandoObject) dataRow); | |
} | |
} | |
return records; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment