第一篇文章就提到过,会给大家介绍数据库方面的知识。那好吧我们这回要好好学习学习数据库方面的知识了!
在学习数据库知识之前,我们先要了解一下,主流的数据库有哪一些:
1、MSSQL,也就是常说的 Microsoft SQL Server。对于 非 Windows 的系统来说,是不能安装使用的——至少在没出 Linux 版之前,但听说微软打算出品 For Linux,只不过功能要低一些。
2、MySQL / Maridb,这是各个公司最常用的数据库。为什么,免费呗,不花银子呗。不花钱的谁不喜欢。而他最佳拍档就是 PHP 啦。听说 PHP 7.0 用得是 PDO 链接数据库的方法,这就对数据库操作提供了更好的方式。
3、Sqlite,你可以把他当成像 Access 那样就是一个文件的数据库,也可以理解为在 Access 基础上,一个全面的独立 SQL 数据库文件
4、Oracle,甲骨文的最好的技术产物——自从 JAVA 被收了后,感觉 Java 就被 Oracle 好好绑架当压寨夫人了,而小弟弟 MySQL 成了小催。。。呃。。。过了过了。Oracle 强大的数据库管控能力是在 SQL 之上,所以被称为大神级的数据库。
还有其它的,他是,可以忽略了。毕竟,用得也少。
下面,我以 Microsoft 常用的 MSSQL 来作为例子给大家介绍一下其如何玩耍。呃。。。我主要用得是 MSSQL 2012,其实其它的也都差不多拉。
好,我们还是像以前,建立个环境。我就用 VS2015 来整了。为什么这样,因为我担心我一高兴写错了,这样很头痛的(^^)!为此,我不会用一些只有 Visual Studio 才能用到的方法,而是采用全平台都能玩的方式演示。
工程名我也想好了,就叫“testProject”,多 COOL 的名字,一看就知道这是干嘛的!
按第一篇文章的方式,我们选把 testProject 那好。那好的样子是:
好,我们要想让 .net Core 与“数据库”交流,就要调用相应的交流包。这些包怎么调用呢?当然是通过设置其 project.json 工程文件来实现。
第一篇说过 project.json 可以用来调用 NuGet 来设置相应的库。
首先,我们打开 project.json,按如下方式来修改:
1、在“dependencies”添加“Microsoft.EntityFrameworkCore.SqlServer”,版本是“1.1.0”;之后再添加“Microsoft.EntityFrameworkCore.Design”,版本是“1.1.0”,类型为“build”。
"Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
"Microsoft.EntityFrameworkCore.Design": {
"version": "1.1.0",
"type": "build"
}
如此修改后,我们就看到了在“引用”中多出了两个家伙:
如果其它的数据库,比如 MySQL、Sqlite,其实,你就把“Microsoft.EntityFrameworkCore.SqlServer”里改成相应的Nuget,比如:“Microsoft.EntityFrameworkCore.Sqlite”、“MySQL.Data.Entities”。
2、我们要用于 First Code 实现的类。怎么做呢?方式是建立一个类来实现。我们先新建立一个文件夹叫“Model”,这样才有 MVC 的样子(><)!之后在里面建立一个类(class),名字叫“myDataBase”——我的数据库!
看准下图,别建错了!毕竟,.net Core 只识 .net Core,对 .net Framework 基本无视。
结果应该如下:
3、改 myDataBase.cs 中的代码
我们先看一下,myDataBase.cs 中的原始样子是什么样子,这样大家统一一下,不然姿势错了,直接再顺下去,八成要出奇葩了。
好的,我们下面对其修改了。
首先,我们在 一大堆 using 中加入“using Microsoft.EntityFrameworkCore;”这样,就有了正确的命名空间来对下面的代码进行支持了。
之后,在 public class myDataBase 后面加上“ : DbContext”。
再然后在方法里建立两个方法——其实说白了相当于数据库中的“表”。
public DbSet<MyUser> Users { get; set; }
public DbSet<MyNews> News { get; set; }
其中,Users 与 News 必须与数据库表明一致,而MyUser 与 MyNews 就是类构成——其结构,自己看心情起。^^
有了两个表后,我们要想一想了。不对呀,我们不连数据库,有两个表有毛用呀,所以我们要连接一下数据库(说实话,我感觉我有点本末倒置)。代码是:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=SQLOLEDB;Data Source=(local);uid=sa;pwd=za;DataBase=myDataBase");
}
其中我们看到在 optionsBuilder 对象中有一个 UseSqlServer方法,说明这是连接 SQL Server 的,如果在 project.json 中选择其它数据库相应的类库,那么这里的 UseSqlServer 也会变成其它的数据库连接方法,比如 Sqlite 就是 UseSqlite。
后面的 @”Server=SQLOLEDB;Data Source=(local);uid=sa;pwd=za;DataBase=myDataBase” 是针对数据库的连接字符串,根据自己的需要进行修改
下面,我们看看 myDataBase.cs 文件里面就是下面这个样子:
我们发现在这个文件中,IDE 提出了两个错误点,可能大家用别的编辑器时不会发现——“MyUser”与“MyNews”。
上面说了,这两货是数据库中表结构的类,所以我们最好先在数据库中建立相应的表。别忘记数据库名是:myData——见连接字符串。
我用得是 SQL Server 2012 具体情况如下:
Users表(主键:id,自增):
News表(主键:news_id,自增):
好了,有表了之后,我们就要实现这两个表了。怎么实现呢,当然要对这两个家伙建立相应的类啦。
依习惯,我个人的习惯呀,你们随意了。就是在Model 中建个 dbo 来存放相应表对应的类。之后,我们在 dbo 文件夹里建立相应的两个类文件:MyUser.cs、MyNews.cs
好,我们来具体实现,先整 MyUser.cs,代码如下:
using System;
using System.ComponentModel.DataAnnotations;
namespace testProject.Model.dbo
{
public class MyUser
{
[Key]
public int id { get; set; }
public string name { get; set; }
public DateTime? createtime { get; set; }
}
}
我们从中可以看出,方法 id、name、createtime 是对应着数据库表 Users 里面的每个字段,连类型也是一一对应。
[Key] 标签标注着 id 是关键字。而如果要在类中调用 [Key] 就必须要引入命令空间:System.ComponentModel.DataAnnotations。
这样第一个表的类就实现了,第二个 MyNews.cs 如同上,我们照“类画类”。
using System;
using System.ComponentModel.DataAnnotations;
namespace testProject.Model.dbo
{
public class MyNews
{
[Key]
public int news_id { get; set; }
public string news_name { get; set; }
public string news_content { get; set; }
public DateTime? news_createtime { get; set; }
}
}
两个类实现完了后,我们就要向数据库类 myDataBase.cs 中引入这两个家伙。因为都在 dbo 文件夹中,所以我们只要在 myDataBase.cs 加入命名空间:testProject.Model.dbo 即可。
这样,数据库连接就成了。其实的只要调用这个 Model 就成了,和平常的 MVC 一样。
什么???有人不会操作。。。天那。。。好吧,我先简单介绍一下吧!T_T
我们先在 Controller 文件夹中的 HomeController.cs 建立一个方法,就叫 writeUser。
public string writeUser()
{
Model.myDataBase db = new Model.myDataBase();
Model.dbo.MyUser user = new Model.dbo.MyUser
{
name = "MysteriousMan",
createtime = DateTime.Now
};
db.Users.Add(user);
db.SaveChanges();
return "ok";
}
运行结果 Web 页:
运行结果 数据库:
这样,.net Core 数据库的基本操作就这样子鸟~~~