欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程语言 > c# >内容正文

c#

sqlsugar 批量删除guid类型主键-ag凯发k8国际

发布时间:2024/10/12 c# 31 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 sqlsugar 批量删除guid类型主键_一文上手sqlsugar 「c# 数据操作系列」 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

前言,暂时挥别nhibernate(虽然我突然发现这玩意还挺有意思的,不过看得人不多)。大步进入了有很多小伙伴向我安利的sqlsugar,嗯,我一直叫sugarsql,好像是这个吧?

这是一个由国内开发者开发的orm框架,是一个轻量级框架(最新版的sqlsugarcore大概只有290kb)。下图是sqlsugar的功能描述:

从图中我们能够大概看出,sqlsugar的使用需要预先创建一个sqlsugarclient对象。sqlsugar在此基础上添加了crud、实体信息维护(映射关系)、配置(aop/过滤器等)、模式(dbfirst、codefirst)还有一些工具类等。可以看到这是一个简而全的框架。

同时,sqlsugar也为查询进行了进一步的扩展,以下是它支持的功能,以及在查询上的增强:

好了,废话不多说,先来试一下如何使用吧。

本节环境是dotnet vscode。因为我的rider过期了,懒得折腾。系统又是linux,所以选择这种方式。至于visual studio和rider的操作,十分简单,而且之前《c#基础系列16》里有过介绍。

先建一个ag凯发k8国际的解决方案,名字为dataprovider:

dotnet new sln --name dataprovider

然后创建一个sqlsugardemo的控制台项目:

dotnet new console --name sqlsugardemo

将这个项目添加到ag凯发k8国际的解决方案里:(这一步为了方便后续管理)

dotnet sln add sqlsugardemo

然后准备安装 sqlsugarcore 。sqlsugar有两个版本,这里使用的是sqlsugarcore,这是针对.net core支持的版本。另一个是sqlsugar,是基于.netframework 4.x的。我们的系列是.net core的,所以就使用sqlsugarcore。

因为我们只是给项目sqlsugardemo添加这个包,而不是给整个ag凯发k8国际的解决方案添加,所以我们需要预先切换目录到sqlsugardemo里:

cd sqlsugardemo/

然后使用命令行安装 sqlsugarcore:

dotnet add package sqlsugarcore

或者使用 nuget:

install-package sqlsugarcore

过一会就可以在控制台中看到安装成功的消息:

log : restore completed in xx sec for xxxxxx/sqlsugardemo/sqlsugardemo.csproj.

在上一节中,我们成功在项目中安装了sqlsugarcore,那么在这一节中将带领小伙伴们一起探索sqlsugar。

先创建一个普通的模型:

public class person{ public int id { get; set; } public string name { get; set; } public int age { get; set; }}

创建一个操作类,取名为 defaultcontext,根据给出的文档得知,sqlsugar每次操作数据的时候需要持有一个 sqlsugarclient对象。所以,这个类的定义应该如下:

public class defaultcontext{ public sqlsugarclient client { get; } public defaultcontext(string connectionstring, dbtype dbtype) { client = new sqlsugarclient(new connectionconfig { connectionstring = connectionstring,//"data source=./demo.db", dbtype = dbtype, isautocloseconnection = true, }); }}
  • connectionstring :连接字符串
  • dbtype:数据库类型,共有以下几个值 mysql sqlserver sqlite oracle postgresql
  • isautocloseconnection:是否自动关闭连接,推荐true,默认为false。默认情况下,需要手动释放

然后测试插入:

var context = new defaultcontext("data source=./demo.db", dbtype.sqlite);context.client.insertable(new person{ age = 10, name = "小明"}).executecommand();

这个时候,提示如下错误:no such table: person

原因很简单,因为数据库demo.db 里没有这个表。也就是sqlsugar默认不会自动生成表,但生成了一个空壳数据库。

这时候,需要在defaultcontext的构造方法里,为client添加一些配置:

client.codefirst.inittables();

这一行的意思是使用codefirst模式,自动生成表 person。

当然,这样并不意味着就能继续了,我们还需要设置 主键策略,在初始化 sqlsugarclient的时候,修改为:

client = new sqlsugarclient(new connectionconfig{ connectionstring = connectionstring,//"data source=./demo.db", dbtype = dbtype, isautocloseconnection = true, initkeytype = initkeytype.attribute //添加这行,意思是根据实体类取发现主键});

然后重新插入,执行成功。

现在进行查询测试:

var query = context.client.queryable();

query是一个isugarqueryable类型的元素,这个接口支持方法链查询和查询表达式两种查询方式:

var list = (from a in context.client.queryable() select a).tolist();console.writeline(list.count);

通过这种方式,直接获取了一个person类型的列表。

然后,我们将针对这几个元素进行修改和删除测试。先来修改:

list[0].age =22;context.client.updateable(list[0]).executecommand();

直接执行会提示如下错误:

意思是没有提供主键或者检索条件。根据它的错误信息,我们可以得知解决方法基础为两种:

修改方案1:

在person类上添加主键,并设置自增长。

public class person{ [sugarcolumn(isprimarykey = true, isidentity = true)] public int id { get; set; } public string name { get; set; } public int age { get; set; }}

ag凯发k8国际的解决方案2:

添加筛选条件:

context.client.updateable(list[0]).where(t=>t.name == "小明").executecommand();

我采用了第一个方法,添加了主键配置,重新运行,执行结果正确。

删除,在更新修改完成后,删除也正常使用:

context.client.deleteable(list[0]).executecommand();

匆匆一撇,发现sqlsugar也是一个让我感觉惊艳的orm框架,功能全面,效率也非常不错。下一篇将为小伙伴们深入探索一下sqlsugar。

更多内容烦请关注我的博客《高先生小屋》

总结

以上是ag凯发k8国际为你收集整理的sqlsugar 批量删除guid类型主键_一文上手sqlsugar 「c# 数据操作系列」的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图