mariadb postgresql Asp.Net Core 轻松学-使用MariaDB/MySql/PostgreSQL和支持多个上下文对象
mariadb postgresql Asp.Net Core 轻松学-使用MariaDB/MySql/PostgreSQL和支持多个上下文对象
原文:Asp.Net Core 轻松学-使用/MySql/和支持多个上下文对象前言
在上一篇文章中(Asp.Net Core 轻松学-10分钟使用连接MSSQL数据库)
,介绍了 连接 MSSQL 的使用方法,在本章中,将继续介绍如何利用 连接到 /MySql 和 数据库,同时,在一个项目中mariadb postgresql,如何添加多个数据库上下文对象,并在业务中使用多个上下文对象,通过这两章的学习,你将掌握使用 连接 MSSQL//MySql/ 的能力。在 . 的时代,由于其设计的独特性(区别于.),使得我们非常容易的使用各种开源的、跨平台的产品和中间件,作为普通程序员,通过广泛参与和使用开源产品,是我们义不容辞的责任和义务,这种行为将进一步的扩大 .Net Core 的生态圈,进而影响整个开发行业。闲话说完,进入今天的正题,连接第三方数据库和支持多个上下文对象。
1. 使用 /MySql 数据库
基于MySQL并遵循GPL v2授权使用的。 她是由以Monty Ab为主要管理者的社区开发的。与另一分支MySQL最新版保持同步更新。在工作与在MySQL下工作几乎一模一样,她们有相同的命令、界面,以及在MySQL中的库与API,所以可以说是为替换MySQL量身定做的,所以它们之间是相通用(兼容),换用后连数据库都不必转换并可以获得提供的许多更好的新特性。
以上介绍来自官方文档
1.1
首先创建一个 Asp.Net Core 2.2 的项目 Ron.,并从 NuGet 仓库引用包 ..MySql,我本地安装的数据库是 ,从介绍中得知, 和 MySql 的使用方式几乎是完全一致的,所以这里使用 ..MySql 连接 也是没有任何问题的
1.2 项目结构和包引用如下
1.3 编写业务实体
下面将编写两个业务实体 Topic/Post,在本章中,无论是连接 /MySql 还是 ,都将使用这两个实体对象
public class Topic
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime CreateTime { get; set; }
public ICollection Posts { get; set; }
}
public class Post
{
public int Id { get; set; }
public int TopicId { get; set; }
public string Content { get; set; }
public DateTime CreateTime { get; set; }
public Topic Topic { get; set; }
}
1.4 编写上下文对象
public class MySqlForumContext : DbContext
{
public MySqlForumContext(DbContextOptions options) : base(options) { }
public DbSet Topics { get; set; }
public DbSet Posts { get; set; }
}
该上下文对象非常简单,只是声明了一个 对象,然后继承自 ,并将 Topic 和 Post 实体对象映射到该上下文中,这个使用方式和之前的文章中连接 MSSQL 数据库的使用方式是完全一致的,这点非常难得,通过 ,无论你连接到的是哪种类型的数据库,其 API 的使用方式几乎是没有什么不同的,可以让开发人员平滑的过渡。
1.5 在 .json 中配置数据库连接字符串
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Mysql.Forum": "server=127.0.0.1;port=3406;uid=root;pwd=root;database=Forum;"
}
}
本来上面的连接字符串是无需指定端口的,但是因为使用 ..MySql 组件连接 MySql 默认使用的端口是:3306,而我本机上指定端口为 3406,所以还是需要指定 port=3406。
1.6 在 .cs 中初始化上下文对象
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options =>
{
var connectionString = this.Configuration["ConnectionStrings:Mysql.Forum"];
options.UseMySql(connectionString);
});
...
}
1.7 创建 对象
Add- MySql.Forum.v1
–
非常完美,到这一步,你已经完成了使用 连接到 /MySql 数据库的过程,先不要急做各种 CURD 的操作,下面,我们继续在项目中使用 连接 数据库,到最后我们再一起做一个 CURD 的 Demo
2. 使用 数据库
是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进,已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。目前可以运行在所有主流操作系统上,包括Linux、Unix(AIX、BSD、HP-UX、SGI IRIX、Mac OS X、和Tru64)和。是完全的事务安全性数据库mariadb postgresqlmariadb postgresql Asp.Net Core 轻松学-使用MariaDB/MySql/PostgreSQL和支持多个上下文对象,完整地支持外键、联合、视图、触发器和存储过程(并支持多种语言开发存储过程)。它支持了大多数的SQL:2008标准的数据类型,包括整型、数值值、布尔型、字节型、字符型、日期型、时间间隔型和时间型,它也支持存储二进制的大对像,包括图片、声音和视频。对很多高级开发语言有原生的编程接口,如C/C++、Java、.Net、Perl、、Ruby、Tcl 和ODBC以及其他语言等,也包含各种文档
以上介绍来自 中文社区:,本人公司的主要业务也是基于 .+MySql+,在使用 的过程中,发现 真的是一个非常强大的数据库,对我们的业务带来非常大的帮助,希望大家都能深入的了解和使用
2.1 首先还是在项目中引用 .. 包
2.2 编写上下文对象
public class NPgSqlForumContext : DbContext
{
public NPgSqlForumContext(DbContextOptions options) : base(options) { }
public DbSet Topics { get; set; }
public DbSet Posts { get; set; }
}
有没有发现,上下文对象 的结构和上面的 几乎是一模一样的
2.3 在配置文件中增加 的连接字符串
{
"Logging": {
"LogLevel": {

"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Mysql.Forum": "server=127.0.0.1;port=3406;uid=root;pwd=root;database=Forum;",
"Pgsql.Forum": "server=127.0.0.1;port=5432;uid=postgres;pwd=postgres;database=Forum;"
}
}
注意: 的侦听的默认端口是:5432
2.4 在 .cs 中初始化上下文对象
public void ConfigureServices(IServiceCollection services)
{
// MariaDB/MySql 上下文初始化
services.AddDbContext(options =>
{
var connectionString = this.Configuration["ConnectionStrings:Mysql.Forum"];
options.UseMySql(connectionString);
});
// PostgreSQL 上下文初始化
services.AddDbContext(options =>
{
var connectionString = this.Configuration["ConnectionStrings:Pgsql.Forum"];
options.UseNpgsql(connectionString);
});
...
}
2.5 创建 for 对象
Add- .Forum.v1 –
– –
== 注意:这里的创建数据库命令和上面创建 /MySql 的命令有一点小小的不同 ==
因为我们现在是在一个项目里面使用多个上下文对象,在创建 的时候, EF 会自动查找匹配的 ,但是,由于使用了多个 ,在执行命令时,必须指定 – ,否则,将抛出 More than one was found. which one to use. Use the '-' for and the '–' for . 的异常。
到这里,我们已经完成了使用 连接到 的过程mariadb postgresql,在 中,由于没有指定 ,所以默认数据表会被放在 下面,有关更多 的 ,请移步官网进一步了解mariadb postgresql Asp.Net Core 轻松学-使用MariaDB/MySql/PostgreSQL和支持多个上下文对象,如果希望在创建数据库的过程中指定 ,可以在实体对象 Topic中应用特性 进行标记即可,也可以手动修改 文件,像下面这样
[Table("topic",Schema ="blogs")]
public class Topic
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime CreateTime { get; set; }
public ICollection Posts { get; set; }
}
// 代码片段,仅需要增加指定 schema:"blogs" 即可
migrationBuilder.CreateTable(
name: "Topics",
schema: "blogs",
columns: table => new
{
Id = table.Column(nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn),
Title = table.Column(nullable: true),
Content = table.Column(nullable: true),
CreateTime = table.Column(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Topics", x => x.Id);
});
3. 在项目中使用多个上下文
在 Ron. 项目中,我们一共创建了两个 ,分别是 和 ,这两个 可以在项目中一起使用,互不影响
3.1 在 注入两个
private MySqlForumContext mysqlContext;
private NPgSqlForumContext pgsqlContext;
public HomeController(MySqlForumContext mysqlContext, NPgSqlForumContext pgsqlContext)
{
this.mysqlContext = mysqlContext;
this.pgsqlContext = pgsqlContext;
}
``
> 注入的方式非常简单,和其它类型的注入使用方式没有区别,就是简单的在 HomeController 的构造函数中声明这两个 Context 对象即可
#####3.2 使用两个上下文对象进行 CURD 操作
> 下面将演示使用 MySqlForumContext 和 NPgSqlForumContext 进行简单的 CURD 操作,这个操作过程和上一篇的 MSSQL 几乎是完全相同的,代码比较简单,就直接贴上来了
[Route("api/[controller]"), ApiController]
public class HomeController : ControllerBase
{
private MySqlForumContext mysqlContext;

private NPgSqlForumContext pgsqlContext;
public HomeController(MySqlForumContext mysqlContext, NPgSqlForumContext pgsqlContext)
{
this.mysqlContext = mysqlContext;
this.pgsqlContext = pgsqlContext;
}
[HttpGet]
public ActionResult Get()
{
// MySql
var mysqlTopics = this.mysqlContext.Topics.ToList();
// PgSql
var pgsqlTopics = this.pgsqlContext.Topics.ToList();
return new JsonResult(new { mysql = mysqlTopics, pgsql = pgsqlTopics });
}
[HttpPost]
public async Task Post([FromBody] TopicViewModel model)
{
// MySql
this.mysqlContext.Topics.Add(new Topic()
{
Content = model.Content,
CreateTime = DateTime.Now,
Title = model.Title
});
await this.mysqlContext.SaveChangesAsync();
// PgSql
this.pgsqlContext.Topics.Add(new Topic()
{
Content = model.Content,
CreateTime = DateTime.Now,
Title = model.Title
});
await this.pgsqlContext.SaveChangesAsync();
}
[HttpPut]
public async Task Put([FromBody] TopicViewModel model)
{
// MySql
var topic = this.mysqlContext.Topics.Where(f => f.Id == model.Id).FirstOrDefault();
topic.Title = model.Title;
topic.Content = model.Content;
await this.mysqlContext.SaveChangesAsync();
// PgSql
var pgTopic = this.pgsqlContext.Topics.Where(f => f.Id == model.Id).FirstOrDefault();
pgTopic.Title = model.Title;
pgTopic.Content = model.Content;
await this.pgsqlContext.SaveChangesAsync();
}
[HttpDelete("{id}")]
public async Task Delete(int id)
{
// MySql
var topic = this.mysqlContext.Topics.Where(f => f.Id == id).FirstOrDefault();
this.mysqlContext.Topics.Remove(topic);
await this.mysqlContext.SaveChangesAsync();
// PgSql
var pgTopic = this.pgsqlContext.Topics.Where(f => f.Id == id).FirstOrDefault();
this.pgsqlContext.Topics.Remove(pgTopic);
await this.pgsqlContext.SaveChangesAsync();
}
}
“`
3.3 打开控制台执行 run
3.4 分别调用 :5000/api/home 中的 GET/POST/PUT/ 接口,可以看到,数据库中可以正常添加和修改数据
从结果中可以看到,代码执行正常完成,至此,本文完成
结束语
通过本文学习,我们掌握了以下能力
演示代码下载
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299
资源库 - 资源分享下载网 » mariadb postgresql Asp.Net Core 轻松学-使用MariaDB/MySql/PostgreSQL和支持多个上下文对象
常见问题FAQ
- 关于资源售价和售后服务的说明?
- 代码有没有售后服务和技术支持?
- 有没有搭建服务?
- 链接地址失效了怎么办?
- 关于解压密码