.net Core 自我学习随笔(三)——我们整个数据库如何?

第一篇文章就提到过,会给大家介绍数据库方面的知识。那好吧我们这回要好好学习学习数据库方面的知识了!

在学习数据库知识之前,我们先要了解一下,主流的数据库有哪一些:

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 数据库的基本操作就这样子鸟~~~

时间: 2024-10-12 16:16:36

.net Core 自我学习随笔(三)——我们整个数据库如何?的相关文章

linux学习随笔三

一.根目录详解 二.file命令使用 ls /  进入根目录 /boot 系统启动相关文件 如内核.initrd以及grub(bootloader)引导加载器 /dev 设备文件 浅蓝色链接文件,***为特殊文件 设备文件有: 块设备:随机访问,数据块 字符设备:线性访问,按字符为单位 设备号:主设备号(major)和次设备号(minor) /etc 配置文件 /home 用户家目录 每一个用户的家目录通常默认为/home/USERNAME形式存在 /root 管理员家目录(生产环境中不建议用r

Delphi面向对象学习随笔三:overload与override

作者:巴哈姆特(转载请注明出处并保持完整)    首先,我想单独说明一下overload,为什么呢?因为overload和对象化关联不大,所以,我感觉单独提出来说明比较好.    我们都知道,在Pascal语法规则中,同一个UNIT里是不能存在两个同名的函数的,例如: function func(): Boolean; function func(const x: Char): Boolean; 这样是会出语法错误的,原因是因为标识符规则限制.但是问题出来了,如果我们需要几个功能相似但是参数不同

python学习随笔(三)_字符串

字符串***    是由一个个字符组成的有序的序列,是字符的集合    使用单引号,双向引号,三引号引住的字符序列    #三引号中可以放sql语句    字符串是不可变对象 字符串元素访问    字符串支持使用索引访问    有序列的字符集合,字符序列    字符串可以是个容器,可以被一个个迭代出来,因为它是有顺序的 字符串join连接*    "string".join(iterable) -> str        将可迭代对象连接起来,使用string作为分隔符     

IOS学习随笔三

IOS storyboard做界面跳转设计页面: self.dismissViewControllerAnimated(true, completion: nil ) ios8已经替换掉了老得方法定义  使用两个参数的dismissViewControllerAnimated NIB做界面设计: self.presentViewController(MyViewController(nibName: "MyViewController", bundle: nil), animated:

android 项目学习随笔三(Fragment )

1.在主页面(activity引用Fragment )的布局文件中定义FrameLayout ,加载Fragment  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fl_content" android:layout

Linq学习随笔三------LINQ to SQL

LINQ to SQL provides a run-time infrastructure for managing relational data as objects. In LINQ to SQL, the data model of a relational database is mapped to an object model expressed in the programming language of the developer. When you execute the

学习随笔 --python连接oracle数据库

#coding=utf-8 import cx_Oracle #引用模块cx_Oracle import os os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'#编码问题 conn=cx_Oracle.connect('Xho', 'sys', 'localhost:1521/orcl') #连接数据库 c=conn.cursor() #获取cursor游标 x=c.execute('select * from weight') #

Python学习日记(三十三) Mysql数据库篇 一

背景 Mysql是一个关系型数据库,由瑞典Mysql AB开发,目前属于Oracle旗下的产品.Mysql是目前最流行的关系型数据库管理系统之一,在WEB方面,Mysql是最好的RDBMS(Relational Database Management System).Mysql是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. 其他类似软件: 关系型数据库:sqllite.db2.Oracle.access.sql se

UFLDL教程笔记及练习答案三(Softmax回归与自我学习)

1:softmax回归 当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归.教程中已经给了cost及gradient的求法.需要注意的是一般用最优化方法求解参数theta的时候,采用的是贝叶斯学派的思想,需要加上参数theta. 习题答案: (1) 数据加载------代码已给 (2) %% STEP 2: Implement softmaxCost   得到计算cost和gradient M = theta