[NewLife.XCode]增删改查入门

NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中。

开源地址:https://github.com/NewLifeX/X

回到目录

增删改查入门

新建控制台项目(.NET Core),从nuget引用NewLife.XCode,(也可以从别的项目引用下载后拷贝XCode.dll和NewLife.Core.dll来使用,区分nfx和netcore版本),敲入以下代码

640?wx_fmt=gif

// 启用控制台日志
XTrace.UseConsole();

// 添加
var user = new UserX
{
Name
= "大石头",
Enable
= true
};
user.Insert();
// 自增字段user.ID已经取得值
XTrace.WriteLine("用户ID:{0}", user.ID);

// 查询
var user2 = UserX.Find(UserX._.Name == "大石头");

// 更新
user2.Logins++;
user2.LastLogin
= DateTime.Now;
user2.Update();

// 删除
var user3 = UserX.FindByID(user.ID);
user3.Delete();

Console.ReadLine();

640?wx_fmt=gif

先跑起来看看效果:

640?wx_fmt=gif

#Software: ConsoleApp4
#ProcessID:
21252 x64
#AppDomain: ConsoleApp4
#FileName: C:\Program Files\dotnet\dotnet.exe
#BaseDirectory: D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.
1\
#CommandLine: D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.
1\ConsoleApp4.dll
#ApplicationType: Console
#CLR:
4.0.30319.42000,
#OS: Microsoft Windows NT
6.2.9200.0, X3/Stone
#CPU:
8
#GC: IsServerGC
=False, LatencyMode=Interactive
#Date:
2019-02-25
#字段: 时间 线程ID 线程池Y网页W普通N 线程名 消息内容
#Fields: Time ThreadID IsPoolThread ThreadName Message
22:57:13.089 1 N - NewLife.Core v8.0.2019.0101 Build 2019-01-26 23:22:36
22:57:13.104 1 N - 新生命X组件核心库 ©2002-2019 新生命开发团队
22:57:13.114 1 N - ConsoleApp4 v1.0.0.0 Build 2000-01-01
22:57:13.115 1 N - ConsoleApp4
22:57:13.115 1 N - Setting的配置文件Config\Core.config 不存在,准备用默认配置覆盖!
22:57:13.277 1 N - Setting的配置文件Config\XCode.config 不存在,准备用默认配置覆盖!
22:57:13.282 1 N - XCode v9.10.2019.0101 Build 2019-01-26 23:22:38
22:57:13.282 1 N - 数据中间件 ©2002-2019 新生命开发团队
22:57:13.628 1 N - 自动为[Membership]设置SQLite连接字符串:Data Source=.\Membership.db;Migration=On
22:57:13.652 1 N - System.Data.SQLite.dll不存在或平台版本不正确,准备联网获取 http://x.newlifex.com/
22:57:13.835 1 N - 下载链接 http://x.newlifex.com/,目标 System.Data.SQLite.win-x64,System.Data.SQLite.win,System.Data.SQLite.st,System.Data.SQLite
22:57:13.964 4 Y 1 WebClientX.Get http://x.newlifex.com/
22:57:15.660 1 N - 分析得到文件 System.Data.SQLite.win-x64_20180823112512.zip,准备下载 http://x.newlifex.com/System.Data.SQLite.win-x64_20180823112512.zip
22:57:15.663 4 Y 19 WebClientX.Get http://x.newlifex.com/System.Data.SQLite.win-x64_20180823112512.zip
22:57:16.897 1 N - 下载完成,共924,475字节,耗时1,232毫秒
22:57:16.897 1 N - 解压缩到 D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Plugins
22:57:17.074 1 N - TypeX.GetType("System.Data.SQLite.SQLiteFactory") => Plugins\System.Data.SQLite.dll
22:57:17.074 1 N - System.Data.SQLite驱动D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Plugins\System.Data.SQLite.dll 版本v1.0.109.0
22:57:17.145 1 N - Data Source=D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Membership.db;Cache Size=-524288;Synchronous=Off;Journal Mode=WAL
22:57:17.154 4 Y 198 检查实体XCode.Membership.UserX的数据表架构,模式:CheckTableWhenFirstUse
22:57:17.160 4 Y 198 创建数据库:Membership
22:57:17.161 4 Y 198 创建数据库:D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Membership.db
22:57:17.181 4 Y 198 select * from sqlite_master
22:57:17.284 4 Y 198 创建表:User(用户)
22:57:17.298 4 Y 198 Create Table User(
ID
integer Primary Key AUTOINCREMENT,
Name
nvarchar(50) NOT NULL COLLATE NOCASE,
Password
nvarchar(50) NULL COLLATE NOCASE,
DisplayName
nvarchar(50) NULL COLLATE NOCASE,
Sex
int NOT NULL,
Mail
nvarchar(50) NULL COLLATE NOCASE,
Mobile
nvarchar(50) NULL COLLATE NOCASE,
Code
nvarchar(50) NULL COLLATE NOCASE,
Avatar
nvarchar(200) NULL COLLATE NOCASE,
RoleID
int NOT NULL,
RoleIDs
nvarchar(200) NULL COLLATE NOCASE,
DepartmentID
int NOT NULL,
Online
bit NOT NULL,
Enab...etime
NULL,
LastLoginIP
nvarchar(50) NULL COLLATE NOCASE,
RegisterTime
datetime NULL,
RegisterIP
nvarchar(50) NULL COLLATE NOCASE,
Ex1
int NOT NULL,
Ex2
int NOT NULL,
Ex3
real NOT NULL,
Ex4
nvarchar(50) NULL COLLATE NOCASE,
Ex5
nvarchar(50) NULL COLLATE NOCASE,
Ex6
nvarchar(50) NULL COLLATE NOCASE,
UpdateUser
nvarchar(50) NULL COLLATE NOCASE,
UpdateUserID
int NOT NULL,
UpdateIP
nvarchar(50) NULL COLLATE NOCASE,
UpdateTime
datetime NULL,
Remark
nvarchar(200) NULL COLLATE NOCASE
)
22:57:17.309 4 Y 198 Create Unique Index IU_User_Name On User (Name)
22:57:17.311 4 Y 198 Create Index IX_User_RoleID On User (RoleID)
22:57:17.312 4 Y 198 Create Index IX_User_UpdateTime On User (UpdateTime)
22:57:17.320 4 Y 198 UserX.Count 快速计算表记录数(非精确)[User/Membership] 参考值 -2
22:57:17.332 4 Y 198 开始检查连接[Membership/SQLite]的数据库架构……
22:57:17.355 4 Y 198 [Membership]的所有实体类(5个):Parameter,UserX,Menu,Role,Department
22:57:17.356 4 Y 198 [Membership]需要检查架构的实体类(1个):Parameter
22:57:17.357 4 Y 198 Membership待检查表架构的实体个数:1
22:57:17.358 4 Y 198 select * from sqlite_master
22:57:17.365 4 Y 198 创建表:Parameter(字典参数)
22:57:17.368 4 Y 198 Create Table Parameter(
ID
integer Primary Key AUTOINCREMENT,
Category
nvarchar(50) NULL COLLATE NOCASE,
Name
nvarchar(50) NULL COLLATE NOCASE,
Value
nvarchar(200) NULL COLLATE NOCASE,
LongValue
nvarchar(2000) NULL COLLATE NOCASE,
Kind
int NOT NULL,
Enable
bit NOT NULL,
Ex1
int NOT NULL,
Ex2
int NOT NULL,
Ex3
real NOT NULL,
Ex4
nvarchar(50) NULL COLLATE NOCASE,
Ex5
nvarchar(50) NULL COLLATE NOCASE,
Ex6
nvarchar(50) NULL COLLATE NOCASE,
CreateUser
nvarchar(50) NULL COLLATE NOCASE,
CreateUserID
int NOT NULL,
CreateIP
nvarchar(50) NULL COLLATE NOCASE,
CreateTime
datetime NULL,
UpdateUser
nvarchar(50) NULL COLLATE NOCASE,
UpdateUserID
int NOT NULL,
UpdateIP
nvarchar(50) NULL COLLATE NOCASE,
UpdateTime
datetime NULL,
Remark
nvarchar(200) NULL COLLATE NOCASE
)
22:57:17.369 4 Y 198 Create Unique Index IU_Parameter_Category_Name On Parameter (Category, Name)
22:57:17.370 4 Y 198 Create Index IX_Parameter_Name On Parameter (Name)
22:57:17.370 4 Y 198 Create Index IX_Parameter_UpdateTime On Parameter (UpdateTime)
22:57:17.372 4 Y 198 检查连接[Membership/SQLite]的数据库架构耗时38ms
22:57:17.383 4 Y 198 Select * From User Order By ID Desc limit 1
22:57:17.388 4 Y 198 Select Count(*) From User
22:57:17.398 4 Y 198 Select Count(*) From User
22:57:17.401 4 Y 198 开始初始化UserX用户数据……
22:57:17.455 4 Y 198 Insert Into User(Name, Password, DisplayName, Sex, Mail, Mobile, Code, Avatar, RoleID, RoleIDs, DepartmentID, Online, Enable, Logins, LastLogin, LastLoginIP, RegisterTime, RegisterIP, Ex1, Ex2, Ex3, Ex4, Ex5, Ex6, UpdateUser, UpdateUserID, UpdateIP, UpdateTime, Remark) Values('admin', '21232F297A57A5A743894A0E4A801FC3', '管理员', 0, null, null, null, null, 1, '', 0, 0, 1, 0, null, null, null, null, 0, 0, 0, null, null, null, null, 0, null, null, null);Select last_insert_rowid() newid
22:57:17.479 4 Y 198 自动为[Log]设置SQLite连接字符串:Data Source=.\Log.db;Migration=On
22:57:17.491 4 Y 198 Data Source=D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Log.db;Cache Size=-524288;Synchronous=Off;Journal Mode=WAL
22:57:17.514 4 Y 198 完成初始化UserX用户数据!
22:57:17.548 1 N - Insert Into User(Name, Password, DisplayName, Sex, Mail, Mobile, Code, Avatar, RoleID, RoleIDs, DepartmentID, Online, Enable, Logins, LastLogin, LastLoginIP, RegisterTime, RegisterIP, Ex1, Ex2, Ex3, Ex4, Ex5, Ex6, UpdateUser, UpdateUserID, UpdateIP, UpdateTime, Remark) Values('大石头', null, null, 0, null, null, null, null, 0, null, 0, 0, 1, 0, null, null, null, null, 0, 0, 0, null, null, null, null, 0, null, null, null);Select last_insert_rowid() newid
22:57:17.561 1 N - 用户ID:2
22:57:17.574 1 N - Select * From User Where Name='大石头' Order By ID Desc limit 1
22:57:17.601 1 N - Update User Set Logins=Logins+1, LastLogin='2019-02-25 22:57:17' Where ID=2
22:57:17.613 1 N - Select * From User Order By ID Desc
22:57:17.620 1 N - Delete From User Where ID=2
22:57:18.519 6 Y 199 检查实体XCode.Membership.Log的数据表架构,模式:CheckTableWhenFirstUse
22:57:18.520 6 Y 199 创建数据库:Log
22:57:18.521 6 Y 199 创建数据库:D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Log.db
22:57:18.532 6 Y 199 创建表:Log(日志)
22:57:18.537 4 Y EQ 开始检查连接[Log/SQLite]的数据库架构……
22:57:18.555 4 Y EQ [Log]的所有实体类(3个):Log,UserOnline,VisitStat
22:57:18.555 4 Y EQ [Log]需要检查架构的实体类(2个):UserOnline,VisitStat
22:57:18.558 4 Y EQ Log待检查表架构的实体个数:2
22:57:18.559 4 Y EQ 创建表:UserOnline(用户在线)
22:57:18.561 4 Y EQ 创建表:VisitStat(访问统计)
22:57:18.564 4 Y EQ 检查连接[Log/SQLite]的数据库架构耗时24ms

640?wx_fmt=gif

 

这是前述代码的完整执行日志,这里我们不做过多分析。

日志大意是:自动配置SQLite数据库,下载平台要求的SQLite驱动,建库建表,增删改查

这里特别需要关注的是这几行:

640?wx_fmt=gif

22:57:17.548  1 N - Insert Into User(Name, Password, DisplayName, Sex, Mail, Mobile, Code, Avatar, RoleID, RoleIDs, DepartmentID, Online, Enable, Logins, LastLogin, LastLoginIP, RegisterTime, RegisterIP, Ex1, Ex2, Ex3, Ex4, Ex5, Ex6, UpdateUser, UpdateUserID, UpdateIP, UpdateTime, Remark) Values('大石头', null, null, 0, null, null, null, null, 0, null, 0, 0, 1, 0, null, null, null, null, 0, 0, 0, null, null, null, null, 0, null, null, null);Select last_insert_rowid() newid
22:57:17.561 1 N - 用户ID:2
22:57:17.574 1 N - Select * From User Where Name='大石头' Order By ID Desc limit 1
22:57:17.601 1 N - Update User Set Logins=Logins+1, LastLogin='2019-02-25 22:57:17' Where ID=2
22:57:17.613 1 N - Select * From User Order By ID Desc
22:57:17.620 1 N - Delete From User Where ID=2

640?wx_fmt=gif

 

 一句user.Insert,生成了一个Insert Into语句,并取得自增字段赋值给ID。

一个简单的Find单字段查找,通过user2.Update更新了两个字段,user3.Delete则删除了这行数据。

这就是一个完成的增删改查!

 

短短的一段代码,也许带给你许多疑问,这些疑问都将在后续文章中得到详细解答:

  • UserX类来自哪里?(XCode内置权限体系Membership)

  • 为何不需要配置数据库?(无配置时默认使用SQLite)

  • 下载了什么东西?(SQLite驱动分为.Net2.0/.Net4.0/.Net4.5等,还有.netstandard以及Linux版本之分,XCode根据平台自动下载正确版本)

  • 为何会自动建表?(这是XCode最为强大的反向工程,2008年开始支持,类似于EF后来的数据迁移)

  • 自增ID。Insert后会即刻取回新插入的自增值

  • Logins=Logins+1。这叫做累加字段

  • UserX.FindByID为何生成不带where的Select查询?(UserX.FindByID内部带有实体缓存,并非简单的Find(ID==2))

 

回到目录

系列教程

NewLife.XCode教程系列[2019版]

  1. 增删改查入门。快速展现用法,代码配置连接字符串

  2. 数据模型文件。建立表格字段和索引,名字以及数据类型规范,推荐字段(时间,用户,IP)

  3. 实体类结构。数据类业务类,泛型基类,接口

  4. 功能设置。连接字符串,调试开关,SQL日志,慢日志,参数化,执行超时。代码与配置文件设置,连接字符串局部设置

  5. 反向工程。自动建立数据库数据表

  6. 数据初始化。InitData写入初始化数据

  7. 高级增删改。重载拦截,自增字段,Valid验证,实体模型(时间,用户,IP)

  8. 脏数据。如何产生,怎么利用

  9. 增量累加。高并发统计

  10. 事务处理。单表和多表,不同连接,多种写法

  11. 扩展属性。多表关联,Map映射

  12. 高级查询。复杂条件,分页,自定义扩展FieldItem,查总记录数,查汇总统计

  13. 数据层缓存。Sql缓存,更新机制

  14. 实体缓存。全表整理缓存,更新机制

  15. 对象缓存。字典缓存,适用用户等数据较多场景。

  16. 百亿级性能。字段精炼,索引完备,合理查询,充分利用缓存

  17. 实体工厂。元数据,通用处理程序

  18. 角色权限。Membership

  19. 导入导出。Xml,Json,二进制,网络或文件

  20. 分表分库。常见拆分逻辑

  21. 高级统计。聚合统计,分组统计

  22. 批量写入。批量插入,批量Upsert,异步保存

  23. 实体队列。写入级缓存,提升性能。

  24. 备份同步。备份数据,恢复数据,同步数据

  25. 数据服务。提供RPC接口服务,远程执行查询,例如SQLite网络版

  26. 大数据分析。ETL抽取,调度计算处理,结果持久化

 

End.


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在实际项目中使用LiteDB NoSQL数据库

LiteDB 是一个 NoSQL 数据库,特点是 MongoDB like 和 0 配置。100% 原汁原味的 C# 开发, Release 只有一个 DLL,官方有一下适用场景:移动App,桌面小应用程序,特有的文件格式,小型的 Web 应用,需…

初探奥尔良(Orleans)

由于工作上关系目前经常被各种并发数据问题搞得焦头烂额,要么要性能舍弃数据上得一致性,要么要一致性但是却得到了特别糟糕的响应。难道鱼和熊掌真的无法兼得吗?然后找到了类似奥尔良这种基于Actor模型的kuangjia首先本人因为是C#系的所以暂不…

[NewLife.XCode]功能设置

NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项…

[NewLife.XCode]数据模型文件

NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中。开源地址:https://github.com/…

[NewLife.XCode]高级增删改

NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中&#xff0…

[NewLife.XCode]数据初始化

NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中&#xff0…

[NewLife.XCode]反向工程(自动建表建库大杀器)

NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中&#xff0…

树上启发式合并

文章内容选自OI Wiki 参考博客 内容: 树上启发式合并(dsu on tree)对于某些树上离线问题可以速度大于等于大部分算法且更易于理解和实现的算法。 他是用来解决一类树上询问问题,一般这种问题有两个特征: 只有对子树…

Wexflow:C#中的开源工作流引擎

Wexflow是一个高性能、可扩展、模块化和跨平台的工作流引擎。Wexflow在GitHub:https://github.com/aelassas/Wexflow。Wexflow的目标是在没有用户干预的情况下自动执行重复任务。在Wexflow的帮助下,构建自动化和工作流过程变得简单。Wexflow还有助于使长…

ASP.NET Core 沉思录 - Logging 的两种介入方法

ASP.NET Core 中依赖注入是一个很重要的环节。因为几乎所有的对象都是由它创建的(相关文章请参见《ASP.NET Core 沉思录 - ServiceProvider 的二度出生》)。因此整个日志记录的相关类型也被直接添加到了 IServiceCollection 中。今天我们将介绍各个接口/…

C# 中的Async 和 Await 的用法详解

众所周知C#提供Async和Await关键字来实现异步编程。在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await。同样本文的内容也大多是翻译的,只不过加上了自己的理解进行了相关知识点的补充,如果你…

Docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务

本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发)、统一认证(IdentityServer4)、应用服务(asp.net core web api);本文不…

ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx

一、前言在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core Runtime、Nginx、MySQL,以及如何将我们的 ASP.NET Core MVC 程序部署到 Li…

VS2017 无法连接到Web服务器“IIS Express”终极解决方案

今天日了gou了,一大早打开VS2017的时候出现无法连接到Web服务器“IIS Express”的错误,然后必应了一下,再谷歌了一下找到的解决方法也都千篇一律,奈何都没能解决,最后通过静下心来的思考,尝试解决了问题&am…

Docker最全教程之使用.NET Core推送钉钉消息(二十)

前言上一篇我们通过实战分享了使用Go推送钉钉消息,由于技痒,笔者现在也编写了一个.NET Core的Demo,作为简单的对照和说明。最后,由于精力有限,笔者希望有兴趣的朋友可以分享下使用CoreRT将.NET Core编译成机器代码这块…

Average

Average 题意: 矩阵W的值可以通过数组a和b得到,W[i][j]a[i]b[j],现在求W的一个子矩阵,平均值最大,且子矩阵必须满足宽度至少是x,高度至少是y,计算最大平均值 题解: 那答案就变成了分别对a和b…

开箱即用Bumblebee独立部署搭建webapi网关详解

在之前的章节里都是讲述如何在程序中使用Bumblebee来构建一个Webapi网关;但这样显然有些麻烦,毕竟很多时候可能只需要一个简单负载处理,还需要写个程序针对服务进行编写代码或配置的确是比较麻烦的事情;如果有负载方面的调整还需要…

ASP.NET Core 文件系统

静态文件 目录浏览 默认页面 MIME类型配置 实战文件服务器 紧接上一讲 中间件 之后,今天来我们来讲一下关于 ASP.NET Core 中静态文件服务。什么是静态文件?先看一下下面例子(在客户端浏览器中通过 url 路径访问了网站的一张图片&#xff09…

如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理...

这篇文章介绍一下,如何使用VS2017给asp.net core添加容器支持,并发布镜像到私有docker hub,然后用chart管理容器镜像的操作流程。话不多说,just do it.新建项目首先新建一个asp.net core项目,这里我新建一个WebApi默认…

[小技巧]EF Core中如何获取上下文中操作过的实体

原文地址:https://www.cnblogs.com/lwqlun/p/10576443.html作者:Lamond Lu 源代码:https://github.com/lamondlu/EFCoreFindSample背景介绍当我们在工作单元(UnitOfWork)中使用EF/EF Core的时候,为了要保持事务,一个用…