当前位置: 移动技术网 > IT编程>开发语言>.net > .net core 实践笔记(二)--EF连接Azure Sql

.net core 实践笔记(二)--EF连接Azure Sql

2018年11月05日  | 移动技术网IT编程  | 我要评论

windows7 iso下载,复旦大学刘湘玲,win8分区

** 温馨提示:如需转载本文,请注明内容出处。**

本文链接:

 

  笔者使用了常见的三层架构,api展示层注入了swagger,作为开发测试使用的文档界面,具体搭建教程网上资料很全,不在赘述。

  数据库目前使用了sqlserver,建了几张表和测试数据后放到了azure云服务器上,值得一提的是,不同于其他云服务器,azure对于数据库进行了优化和精简(毕竟自己微软自己家的东西,权利就是大),优缺点清参照官网文档。

  笔者体验下来的感觉就是使用门槛要比其他的家的云服务器大的多,用户的账号和token等信息需要在azure上配置,数据库上的权限比精简前可以说是小的多,但也安全。

  orm使用的是entity framework和dapper,执行命令都是使用dapper,毕竟比ef轻的多,ef是用来映射数据库实体类的,在.net core下,少了t4模板,我们就需要使用命令手动映射了。

 

安装ef的包

install-package microsoft.entityframeworkcore.sqlserver
install-package microsoft.entityframeworkcore.tools
install-package microsoft.visualstudio.web.codegeneration.design
install-package microsoft.entityframeworkcore

 

映射模型

scaffold-dbcontext -force “data source=(local); initial catalog=nagrand; pooling=true; uid=sa;pwd=123;connect timeout=10” microsoft.entityframeworkcore.sqlserver -outputdir models

据说能去的空格都要去掉,不然可能会拉取失败。

 

改装成拉azure上的语句

 

scaffold-dbcontext -force “data source=tcp:test-server.database.windows.net,1433; initial catalog=dbname; pooling=true;persist security info=false; uid=sa;pwd=123;trustservercertificate=false;connect timeout=30” microsoft.entityframeworkcore.sqlserver -outputdir models

 

填坑:

  • 如出现错误,请检查拉去的项目(类库)里是否都前面提到的几个包。
  • 注意符号,楼主把这个命令放到了onenote里了,结果第二天就不能用了,试了好多遍发现引号莫名其妙变成中文的了,并且没有语法的错误提示!!
  • 用到的账号和密码一定拿到ssms里登录一下试试
  • 博主使用命令安装包的时候发现项目下有分析器是异常状态,查看是引用了c盘的文件,这个要注意,迁移的时候如果没有这些文件可能会出异常,可以从nugit包里找到这些包一个个手动安装,就不会有异常了。

 dapper

附上一个dapperhelper,用于与数据库的交互

public static class dapperhelper
    {
        #region 连接字符串
        public static string conn_string = "";
        #endregion

        #region select
        /// <summary>
        /// 获取数据集合
        /// </summary>
        /// <typeparam name="t"></typeparam>
        /// <param name="sqlstring"></param>
        /// <param name="param"></param>
        /// <param name="commandtype"></param>
        /// <param name="commandtimeout"></param>
        /// <returns></returns>
        public static list<t> getlist<t>(this string sqlstring, object param = null, commandtype? commandtype = commandtype.text, int? commandtimeout = 180)
        {
            var list = new list<t>();

            using (var db = new sqlconnection(conn_string))
            {
                ienumerable<t> ts = null;
                if (null == param)
                {
                    ts = db.query<t>(sqlstring, null, null, true, commandtimeout, commandtype);
                }
                else
                {
                    ts = db.query<t>(sqlstring, param, null, true, commandtimeout, commandtype);
                }
                if (null != ts)
                {
                    list = ts.aslist();
                }
            }

            return list;
        }

        public static list<t> getlist<t>(this string sqlstring)
        {
            return getlist<t>(sqlstring, null, commandtype.text);
        }

        public static list<t> getlist<t>(this string sqlstring, object param)
        {
            if (null == param)
            {
                return getlist<t>(sqlstring);
            }

            return getlist<t>(sqlstring, param);
        }
        #endregion

        #region insert
        /// <summary>
        /// 单条数据写入 动态模板模式/t
        /// </summary>
        /// <param name="sqlstring"></param>
        /// <param name="param"></param>
        /// <param name="commandtype"></param>
        /// <param name="commandtimeout"></param>
        /// <returns></returns>
        public static bool insert(this string sqlstring, object param = null, commandtype commandtype = commandtype.text, int? commandtimeout = 5)
        {
            return executenonquery(sqlstring, param, commandtype, commandtimeout);
        }

        /// <summary>
        /// 批量写入
        /// </summary>
        /// <typeparam name="t"></typeparam>
        /// <param name="sqlstring"></param>
        /// <param name="list"></param>
        /// <param name="commandtype"></param>
        /// <param name="commandtimeout"></param>
        /// <returns></returns>
        public static bool insert<t>(this string sqlstring, list<t> list, commandtype commandtype = commandtype.text, int? commandtimeout = 5)
        {
            var intresult = 0;

            if (null != list && 0 < list.count)
            {
                using (var db = new sqlconnection(conn_string))
                {
                    intresult = db.execute(sqlstring, list, null, commandtimeout, commandtype);
                }
            }

            return intresult > 0;
        }
        #endregion

        #region update
        public static bool update(this string sqlstring, object param, commandtype commandtype = commandtype.text, int? commandtimeout = 5)
        {
            return executenonquery(sqlstring, param, commandtype, commandtimeout);
        }
        #endregion

        #region delete
        public static bool delete(this string sqlstring, object param, commandtype commandtype = commandtype.text, int? commandtimeout = 5)
        {
            return executenonquery(sqlstring, param, commandtype, commandtimeout);
        }
        #endregion

        #region private methods
        private static bool executenonquery(this string sqlstring, object param, commandtype commandtype = commandtype.text, int? commandtimeout = 5)
        {
            var intresult = 0;
            using (var db = new sqlconnection(conn_string))
            {
                if (null == param)
                {
                    intresult = db.execute(sqlstring, null, null, commandtimeout, commandtype);

                }
                else
                {
                    intresult = db.execute(sqlstring, param, null, commandtimeout, commandtype);
                }
            }

            return intresult > 0;
        }
        #endregion
    }
view code

一般数据库连接字符串需要放入配置文件,可以写入自带的appsetting.xml里或者新建其他的。

{
  "connectionstrings": {
    "dbconnection": "data source={address};initial catalog={dbname};pooling=true;persist security info=false;uid={account};pwd={password};trustservercertificate=false;connect timeout=10"
  },
  "logging": {
    "loglevel": {
      "default": "warning"
    }
  },
  "allowedhosts": "*"
}

 

然后在setup中获取节点并复制到连接字符串

dapperhelper.conn_string = configuration.getconnectionstring("dbconnection");

 

整个架子基本搞定,下面就可以写业务接口了。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网