将DBPARAMETER代替SQLParameter与_Context.Database.sqlquery进行存储的PR



我正在使用实体框架6.1和genericRepository。要执行存储过程,我正在使用sqlquery方法。目前,我正在使用SQLPARAMETER,但是作为通用式词,我不想使用某些特定类。我尝试了多个选项,但是如何在此处使用dbparameter。我尝试从dbcontext访问providername(system.data.sqlclient),但这也不可用。任何方向都会有所帮助。请让我知道您要我提供更多信息。

    public IEnumerable<T> GetAllFromStoredProcedure(string storedProcedureName, List<StoredProcedureParameter> parameters)
    {
        List<SqlParameter> sqlParameters = new List<SqlParameter>();
        foreach (StoredProcedureParameter parameter in parameters)
        {
            sqlParameters.Add(new SqlParameter(parameter.Name, parameter.Type) { Value = parameter.Value});
        }
        return _context.Database.SqlQuery<T>(storedProcedureName, sqlParameters.ToArray());
    }

称为 -

    clientRepository.GetAllFromStoredProcedure("GetClients", parameters).ToList();

我为此所做的 -

在我的域项目中(它具有使用数据库中的代码创建的上下文和实体),我添加了一个storedprocedureParameter -

public class StoredProcedureParameter
{
    public string Name { get; set; }
    public DbType Type { get; set; }
    public object Value { get; set; }
    public static object[] CreateParameters(List<StoredProcedureParameter> parameters)
    {
        List<SqlParameter> sqlParameters = new List<SqlParameter>();
        foreach (StoredProcedureParameter parameter in parameters)
        {
            sqlParameters.Add(new SqlParameter(parameter.Name, parameter.Type) { Value = parameter.Value });
        }
        return sqlParameters.ToArray();
    }
}

,然后在我的存储库项目(具有通用词和单位工程)中,我添加了一个新方法 -

    public IEnumerable<T> GetAllFromStoredProcedure(string storedProcedureName, List<StoredProcedureParameter> parameters)
    {
        return _context.Database.SqlQuery<T>(storedProcedureName, StoredProcedureParameter.CreateParameters(parameters));
    }

现在,当调用reposority-> getAllFromStoredProcedure方法(来自我的应用程序项目)时,我将从domain-> storedProcedureParameter-> createParameters方法中创建参数列表。这样可以确保传递的参数是正确的类型,我的通用列表仍然是通用的,并且我的应用程序项目也不受影响。

最新更新