.NET ORM工具Pax实战(1)Pax插入表到数据库

Pax是微软的一个ORM读写工具,比NHibernate更好用。可以在项目中用Nuget下载并安装。

可以看到引用中多了

在App.config里设置配置文件如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>

 <connectionStrings>
    <clear/>
    <add name="Couriers" connectionString="Server=.;User id=sa;password=3179412;Initial Catalog=Couriers;MultipleActiveResultSets=true;Type System Version=SQL Server 2012;" />
  </connectionStrings>
</configuration>

写一个建立与sqlserver2012连接的工具类

public  class BaseDb
    {
        public IDbConnection GetDb( IOrmLiteDialectProvider provider = null)
        {
            var connections = Pax.Lib.Configuration.ConfigUtils.GetConnectionString(ConnectionStr);
            //??主要作用是如果 ?? 运算符的左操作数非空,该运算符将返回左操作数,否则返回右操作数。
            var factory = new OrmLiteConnectionFactory(connections, provider??SqlServerDialect.Provider);
            return factory.Open();
        }

        public BaseDb(string connectionStr)
        {
            ConnectionStr = connectionStr;
        }

        private string ConnectionStr;
        public IDbConnection Db => GetDb();

        ~BaseDb()//析构函数
        {
            if (Db.State == ConnectionState.Open)
            {
                Db.Close();
                Db.Dispose();
            }
        }
    }

连接前Couriers数据库里什么也没有。

建立一个类,类的字段要对应数据库的字段。

 public class ModelWithIdOnly:
    {
        public ModelWithIdOnly()
        {
        }
        public ModelWithIdOnly(long id)
        {
            Id = id;
        }
        // must be long as you cannot have a table with only an autoincrement field
        public long Id { get; set; }
    }

在入口处写程序如下:

 class Program
    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.Db;
            Db.DropAndCreateTable(typeof(ModelWithIdOnly));
            var success = Db.TableExists(typeof (ModelWithIdOnly).Name.SqlTableRaw());
            if (success)
            {
                Console.WriteLine("ModelWithIdOnly表插入到了数据库");
                Console.ReadKey();
            }
        }
    }

运行可以看到

表的删除

 static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.Db;
            Db.DropTable<ModelWithIdOnly>();
            var success = Db.TableExists(typeof(ModelWithIdOnly).Name.SqlTableRaw());//检查新表是否存在
            if (!success)
            {
                Console.WriteLine("ModelWithIdOnly表在数据库中删除");
                Console.ReadKey();
            }

        }

表的新增

 class Program
    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.Db;
            Db.CreateTable<ModelWithIdOnly>();
            var success = Db.TableExists(typeof(ModelWithIdOnly).Name.SqlTableRaw());//检查新表是否存在
            if (success)
            {
                Console.WriteLine("ModelWithIdOnly表在数据库中新增");
                Console.ReadKey();
            }
        }
    }

插入一列

class Program
    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.Db;
            var success= Db.Insert(new ModelWithIdOnly(1));
            if (success>0)
            {
                Console.WriteLine("成功插入了{0}列",success);
                Console.ReadKey();
            }
        }
    }

返回表中所有数据

class Program
    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.Db;
            var rows = Db.Select<ModelWithIdOnly>();
            if (rows.Count>0)
            {
                Console.WriteLine(rows);
                Console.ReadKey();
            }
        }
    }

输出sql语句

class Program
    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.Db;
            var rows = Db.Select<ModelWithIdOnly>();
            var strSQL = Db.GetLastSql();
            if (rows.Count>0)
            {
                Console.WriteLine(strSQL);
                Console.ReadKey();
            }
        }
    }

创建新类

public class ModelWithGuid
    {
        public long Id { get; set; }
        public Guid Guid { get; set; }
    }

简单的插入与查找

 class Program
    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.Db;
            Db.DropAndCreateTable<ModelWithGuid>();
            var models = new[] {
                    new ModelWithGuid { Id = 1, Guid = Guid.NewGuid() },
                    new ModelWithGuid { Id = 2, Guid = Guid.NewGuid() }
                };

            var successNum= Db.SaveAll(models);
            string strSql1 = Db.GetLastSql();//获得sql语句
            var newModel = Db.SingleById<ModelWithGuid>(models[0].Id);//取出某列            var newModel2 = Db.Single<ModelWithGuid>(q => q.Guid == models[0].Guid);//取出某列            Db.Update(new ModelWithGuid { Id = models[0].Id, Guid = newGuid });//更新某列            bool has = Db.TableExists(typeof (ModelWithIdOnly).Name.SqlTableRaw());//某表是否存在
             var model = new[] {
                    new ModelWithGuid { Id = 3, Guid = Guid.NewGuid() }
                };
           long num=    Db.Insert(model);//插入某列,返回插入列数

        }
    }

执行sql语句插class Program

    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.GetDb();
            var models = new[] {
                    new ModelWithGuid { Id = 4, Guid = Guid.NewGuid() },
                    new ModelWithGuid { Id =5, Guid = Guid.NewGuid() }
                };
            Db.ExecuteSql("INSERT INTO {0} ({1},{2}) VALUES (4,{3})"
                  .Fmt("ModelWithGuid".SqlTable(),
                      "Id".SqlColumn(),
                      "Guid".SqlColumn(),
                      models[0].Guid.SqlValue()));
            var normalLastInsertedId = Db.LastInsertId();             var rows = Db.Select<ModelWithGuid>();             var row2 = rows.First(x => x.Id == 4);

var rowIds = new List<int>(new[] { 1, 2, 3 });

rows = Db.SelectByIds<ModelWithGuid>(rowIds);
              var dbRowIds = rows.ConvertAll(x => x.Id);

            Console.WriteLine(normalLastInsertedId.ToString());
            Console.ReadKey();
        }
    }

批量删除

class Program
    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.GetDb();
            var rowIds = new List<int>(new[] { 1, 2 });
            var success=   Db.DeleteByIds<ModelWithGuid>(new[] { rowIds[0], rowIds[1] });
            Console.WriteLine(success);
            Console.ReadKey();
        }
    }

选择性删除

class Program
    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.GetDb();
            var rowIds = new List<int>(new[] { 1, 2 });
            var success=   Db.DeleteByIds<ModelWithGuid>(new[] { rowIds[0], rowIds[1] });
            Db.Delete<ModelWithGuid>(x => x.Id <= 4);

            var dbRow = Db.SingleById<ModelWithGuid>(4);
            Console.WriteLine(dbRow==null?"没有":dbRow.Guid.ToString());
            Console.ReadKey();
        }
    }

条件删除

class Program
    {
        static void Main(string[] args)
        {
            BaseDb baseDb = new BaseDb("Couriers");
            var Db = baseDb.GetDb();
            Db.DeleteFmt<ModelWithIdOnly>(where: "Id".SqlColumn() + " < {0}".SqlFmt(2));
            var dbRow = Db.SingleById<ModelWithIdOnly>(1);
            Console.WriteLine(dbRow==null?"没有":dbRow.Id.ToString());
            Console.ReadKey();
        }
    }

插入与删除

 class Program
    {
        static void Main(string[] args)
        {

            var connections = Pax.Lib.Configuration.ConfigUtils.GetConnectionString("Couriers");
            var factory = new OrmLiteConnectionFactory(connections, SqlServerDialect.Provider);
            IDbConnection Db = factory.Open();
            using (Db)
            {
                ModelWithIdOnly one = new ModelWithIdOnly {Id = 10};
                Db.Save(one);
                var rowsAffected = Db.Delete(one);
                Console.WriteLine(rowsAffected.ToString());
                Console.ReadKey();
            }
        }
    }

批量增删

class Program
    {
        static void Main(string[] args)
        {

            var connections = Pax.Lib.Configuration.ConfigUtils.GetConnectionString("Couriers");
            var factory = new OrmLiteConnectionFactory(connections, SqlServerDialect.Provider);
            IDbConnection Db = factory.Open();
            using (Db)
            {
                List <ModelWithIdOnly> ones = new List<ModelWithIdOnly>(){ new ModelWithIdOnly { Id = 8},new ModelWithIdOnly{Id=11} };
                Db.SaveAll(ones);
                var rowsAffected = Db.Delete(ones.ToArray());
                Console.WriteLine(rowsAffected.ToString());
                Console.ReadKey();
            }
        }
    }

按条件更新

时间: 2024-12-25 07:48:06

.NET ORM工具Pax实战(1)Pax插入表到数据库的相关文章

对.net orm工具Dapper在多数据库方面的优化

Dapper是近2年异军突起的新ORM工具,它有ado.net般的高性能又有反射映射实体的灵活性,非常适合喜欢原生sql的程序员使用,而且它源码很小,十分轻便.我写本博客的目的不是为了介绍Dapper,而是要将我使用Dapper迁移数据库过程中遇到的bug和一些优化介绍给大家,Dapper在多数据库支持上有些问题,我做了以下5个方面的优化. 一:Dapper核心库存在一个重要的bug是各数据库默认返回类型不同造成的,像count,sum等一些函数在不同的数据库返回类型不同.比如 select c

分享一个自己写的.Net的ORM工具

注册博客园帐号也有好几年了,之前注册帐号主要是为了看别人的文章下载东西的时候方便.从来没有写过什么博客,一直以为只要注册了帐号就可以写博客,最近用到了才发现还得申请一下,于是就申请了博客,算了也不扯这么多没用的了,直接进入主题吧! 网上开源的ORM工具也不少,开源中国上就有不少,很多都下载试用过,不过感觉用起来都不是很方便,园子里面也有不少人分享自己写的ORM工具,用过一个叫 MySoft.Data 的ORM工具,感觉里面的链式调用函数的写法不错,但是用起来感觉也有些不如意的地方,于是某个周末的

第130讲:Hadoop集群管理工具DataBlockScanner 实战详解学习笔记

第130讲:Hadoop集群管理工具DataBlockScanner 实战详解学习笔记 DataBlockScanner在datanode上运行的block扫描器,定期检测当前datanode节点上所有的block,从而在客户端读到有问题的块前及时检测和修复有问题的块. 它有所有维护的块的列表,通过对块的列表依次的扫描,查看是否有校验问题或错误问题,它还有截流机制. 什么叫截流机制?DataBlockScanner扫描时会消耗大量的磁盘带宽,如果占用磁盘带宽太大,会有性能问题.所以它会只占用一小

Skype For Business 2015实战系列5:安装后端数据库

Skype For Business 2015实战系列5:安装后端数据库 前面给大家介绍了Skype For Business Server 2015的活动目录准备和证书以及文件共享的准备工作,今天来给大家介绍一下SFB的后端服务器准备工作. 和微软的其他服务一样,SFB的后端服务器使用的是微软自己的SQL Server的数据库,其主作用是用来存储状态信息.用户的联系人列表.包含所有当前会议状态相关的永久数据的会议数据,以及会议安排数据.(部署中可以将监控.存档服务器的后端服务器和后端数据库并置

SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地址码 . FlightID Varchar(10) NULL, --航班号) 2/ 建立存储过程 USE DF17DataProIF EXISTS (SELECT * FROM SYS.PROCEDURES WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[BulkDataP

企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

如何将Emoj表情插入mysql5.6数据库__python+mysqldb

废话不多说,相信看到这里的看客已经看过很多配置文件的设置方法.但是问题还是没有解决.本文就详细记录一下我的解决方法吧. 我的环境:mysql5.6+python2.7.3+MySQLdb1.2.4 1.桌面上右击 计算机,选择"管理", 选择"服务和应用程序"---"服务", 在里面找到MySQL56的服务. 2.右击 MySQL服务,查看"属性":往后拖一下,找到-default-file下图中画框部分,这里指明了MySQL

java批量插入数据进数据库中

方式1: for循环,每一次进行一次插入数据. 方式2: jdbc的preparedStatement的batch操作 PreparedStatement.addBatch(); ...... PreparedStatement.executeBatch(); 一次最多不要超过50条:1.因为当你插入的时候 数据库已经锁定,然而如果你一次性插入太多会造成其他业务的等待.2.会造成内存的溢出 方式2的本质是:insert into table (a,b,c,d) values(av,bv,cv.d

案例:Oracle exp dmp文件损坏 通过CPFL工具抽取dmp中的数据表进行恢复

Oracle数据库逻辑导出exp的dmp文件损坏,通过非常规恢复抽取dmp文件中表的数据 在有些时候,exp的dmp文件因为某种原因损坏(比如磁盘异常,exp过程损坏等),导致imp导入无法继续,下面的处理方法(直接读取dmp文件)来对dmp文件进行抢救性恢复,最大程度减少数据丢失损失 1.创建exp dmp文件并使用dd破坏 SQL> create table t_xifenfei as select * from dba_objects; Table created. SQL> selec