• efcore执行sql查询(无需定义dbset<model>)


    efcore默认执行sql语句需要 dbContext.Set<T>().FromSqlRaw(sql, parameters);

    必须定义具体的泛型参数T的实体类,然后在dbContext中包含  public virtual DbSet<User> User { get; set; },

    如下函数可省去model的定义,也无需在dbContext中做额外操作,返回任意类型

    public List<TResult> SqlQuery<TResult>(string sql, params object[] parameters) where TResult: class,new()
    {
    List<TResult> list = new List<TResult>();
    using (var conn = dbContext.Database.GetDbConnection())
    {
    using (var comm = conn.CreateCommand())
    {
    try
    {
    conn.Open();
    comm.CommandText = sql;
    if (parameters != null)
    comm.Parameters.AddRange(parameters);
    //CommandBehavior.CloseConnection当SqlDataReader释放的时候,顺便把SqlConnection对象也释放掉
    var dr= comm.ExecuteReader(CommandBehavior.Default);

    while (dr.Read())
    {
    TResult t = new TResult();
    for (var i = 0; i < dr.FieldCount; i++)
    {

    //类型mapper,有同名的字段或属性赋值否则丢弃
    var columnName = dr.GetName(i);
    var colDataType = dr.GetFieldType(i);
    var val = dr.GetFieldValue<object>(i);

    var field = t.GetType().GetField(columnName);
    field?.SetValue(t, val);

    var property = t.GetType().GetProperty(columnName);
    property?.SetValue(t, val);

    }

    list.Add(t);
    }
    }
    catch (Exception ex)
    {
    throw ex;
    }
    finally
    {
    if (conn != null && conn.State != ConnectionState.Closed)
    conn.Close();
    }
    }
    }
    return list;
    }

    达梦数据库使用

    DmParameter sqlParameters = new DmParameter("pname", "zhangsan") ;
    var list = SqlQuery<User>("select * from manage.user  where username=:pname ", sqlParameters);

    作者:xuejianxiyang
    出处:http://xuejianxiyang.cnblogs.com
    关于作者:Heaven helps those who help themselves.
    本文版权归原作者和博客园共有,欢迎转载,但未经原作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    canvas,画个纸飞机
    时钟
    去除滚动条,内容仍然可以滚动
    鼠标指针移入移出改变图片透明度
    Mysql数据库优化总结
    一次利用nginx漏洞的木马事件
    一个批量删除大表数据的shell小脚本
    MegaCli监控raid卡磁盘信息以及相关的shell脚本
    MYSQL delete语句不支持别名?
    一次Mysql数据库服务器磁盘空间满引发的写入和同步问题
  • 原文地址:https://www.cnblogs.com/xuejianxiyang/p/15710704.html
Copyright © 2020-2023  润新知