.Net6使用EFCore在SqlServer上创建数据库

  本文介绍如何在SqlServer上创建一个新的数据库。项目便用VS2022编辑器,运行在.Net6 Asp.Net Core WebApi项目模板中,数据库程序运行在阿里云服务器的Windows Server2019中,使用的是SqlServer2022版本,EntityFrameworkCore的版本为6.0.25,数据库显示程序为SQL Server Management Studio19.1。采用CodeFirst创建数据库,即先有代码数据结构,再有数据库。
  建议新建一个.Net6 Web Api项目作为测试,并且项目命名、文件夹命名、文件命名都和我一样,否则会出现各种问题。没有搭建数据库程序的请先看博客:在服务器(Window Server 2019)上安装SQL Server数据库。

1.准备工作

查看你安装SqlServer程序的公网IP地址,如果安装在本地则不用看了,我的是在阿里云控制台里显示的。
在这里插入图片描述

确保你安装了SqlServer程序在一台电脑上,并使用用户名密码可以在SQL Server Management Studio中成功连接数据库。如图所示为连接成功:
.Net6使用EFCore在SqlServer上创建数据库_第1张图片

2.配置EFCore环境

打开VS2022,新建一个.Net6 Asp.Net Core WebApi项目。
.Net6使用EFCore在SqlServer上创建数据库_第2张图片
项目名为:test_EFCore
建议和我一样
.Net6使用EFCore在SqlServer上创建数据库_第3张图片
使用.Net6,点击创建。
.Net6使用EFCore在SqlServer上创建数据库_第4张图片
右键项目,点击”管理NuGet程序包“。
.Net6使用EFCore在SqlServer上创建数据库_第5张图片
在浏览中找到这两个包:需要安装6.0.x版本的,要和你的.Net版本对应。你是.Net8,就安装8.0.x版本的。
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
.Net6使用EFCore在SqlServer上创建数据库_第6张图片
安装Microsoft.EntityFrameworkCore.SqlServer6.0,要和你的.Net版本对应。
.Net6使用EFCore在SqlServer上创建数据库_第7张图片
安装Microsoft.EntityFrameworkCore.Tools6.0,要和你的.Net版本对应。
.Net6使用EFCore在SqlServer上创建数据库_第8张图片

3.编写数据库代码

新建文件夹:Entities
.Net6使用EFCore在SqlServer上创建数据库_第9张图片
在这个文件夹里新建两个cs文件:Product.cs、ProductCategory.cs。
这两个文件对应了数据库的两个表,名称为“Id”的属性会被EFCore识别为主键。
.Net6使用EFCore在SqlServer上创建数据库_第10张图片
Product.cs文件内容:

namespace test_EFCore.Entities
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string ImageURL { get; set; }
        public decimal Price { get; set; }
        public int Qty { get; set; }
        public int CategoryId { get; set; }
    }
}

ProductCategory.cs文件内容:

namespace test_EFCore.Entities
{
    public class ProductCategory
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

再新建一个cs文件:test_EFCoreDbContext.cs
.Net6使用EFCore在SqlServer上创建数据库_第11张图片
test_EFCoreDbContext.cs文件内容:

using Microsoft.EntityFrameworkCore;
using test_EFCore.Entities;

namespace test_EFCore
{
    public class test_EFCoreDbContext : DbContext
    {
        public test_EFCoreDbContext(DbContextOptions<test_EFCoreDbContext> options) : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            //Products
            //Beauty Category
            modelBuilder.Entity<Product>().HasData(new Product
            {
                Id = 1,
                Name = "Glossier - Beauty Kit",
                Description = "A kit provided by Glossier, containing skin care, hair care and makeup products",
                ImageURL = "/Images/Beauty/Beauty1.png",
                Price = 100,
                Qty = 100,
                CategoryId = 1

            });
            modelBuilder.Entity<Product>().HasData(new Product
            {
                Id = 2,
                Name = "Curology - Skin Care Kit",
                Description = "A kit provided by Curology, containing skin care products",
                ImageURL = "/Images/Beauty/Beauty2.png",
                Price = 50,
                Qty = 45,
                CategoryId = 1

            });
            modelBuilder.Entity<Product>().HasData(new Product
            {
                Id = 3,
                Name = "Cocooil - Organic Coconut Oil",
                Description = "A kit provided by Curology, containing skin care products",
                ImageURL = "/Images/Beauty/Beauty3.png",
                Price = 20,
                Qty = 30,
                CategoryId = 1

            });
            modelBuilder.Entity<Product>().HasData(new Product
            {
                Id = 4,
                Name = "Schwarzkopf - Hair Care and Skin Care Kit",
                Description = "A kit provided by Schwarzkopf, containing skin care and hair care products",
                ImageURL = "/Images/Beauty/Beauty4.png",
                Price = 50,
                Qty = 60,
                CategoryId = 1

            });
            modelBuilder.Entity<Product>().HasData(new Product
            {
                Id = 5,
                Name = "Skin Care Kit",
                Description = "Skin Care Kit, containing skin care and hair care products",
                ImageURL = "/Images/Beauty/Beauty5.png",
                Price = 30,
                Qty = 85,
                CategoryId = 1

            });
            //Electronics Category
            modelBuilder.Entity<Product>().HasData(new Product
            {
                Id = 6,
                Name = "Air Pods",
                Description = "Air Pods - in-ear wireless headphones",
                ImageURL = "/Images/Electronic/Electronics1.png",
                Price = 100,
                Qty = 120,
                CategoryId = 3

            });
            modelBuilder.Entity<Product>().HasData(new Product
            {
                Id = 7,
                Name = "On-ear Golden Headphones",
                Description = "On-ear Golden Headphones - these headphones are not wireless",
                ImageURL = "/Images/Electronic/Electronics2.png",
                Price = 40,
                Qty = 200,
                CategoryId = 3

            });
            modelBuilder.Entity<Product>().HasData(new Product
            {
                Id = 8,
                Name = "On-ear Black Headphones",
                Description = "On-ear Black Headphones - these headphones are not wireless",
                ImageURL = "/Images/Electronic/Electronics3.png",
                Price = 40,
                Qty = 300,
                CategoryId = 3

            });

            //Add Product Categories
            modelBuilder.Entity<ProductCategory>().HasData(new ProductCategory
            {
                Id = 1,
                Name = "Beauty",
            });
            modelBuilder.Entity<ProductCategory>().HasData(new ProductCategory
            {
                Id = 2,
                Name = "Furniture",
            });
            modelBuilder.Entity<ProductCategory>().HasData(new ProductCategory
            {
                Id = 3,
                Name = "Electronics",
            });
            modelBuilder.Entity<ProductCategory>().HasData(new ProductCategory
            {
                Id = 4,
                Name = "Shoes",
            });

        }

        public DbSet<Product> Products { get; set; }
        public DbSet<ProductCategory> ProductCategories { get; set; }

    }
}

这个文件主要是用来生成数据库的,数据库有两个表:Products和ProductCategories,并OnModelCreating函数中预先放了一些初始数据。

4.配置数据库连接设置

在Program.cs文件中添加如下代码:

builder.Services.AddDbContext<test_EFCoreDbContext>(p =>
{
    p.UseSqlServer(builder.Configuration.GetConnectionString("SqlServer"));
});

.Net6使用EFCore在SqlServer上创建数据库_第12张图片
在appsettings.json中加入数据库连接的字符串,这里有几个参数很重要!
server:这个是你服务器的IP地址,如果是本地的数据库则添入 localhost 或 127.0.0.1 ,如果是服务器上,则添入你服务器的公网IP地址。
uid:这个是你数据库的连接用户名。
pwd:这个是你数据库的连接密码。
database:这个是数据库的名称,一个数据库程序下可以有多个数据库。

  "ConnectionStrings": {
    "SqlServer": "server=**.***.***.***;uid=sa;pwd=*************;database=test_EFCore;TrustServerCertificate=true;"
  },

.Net6使用EFCore在SqlServer上创建数据库_第13张图片

5.生成数据库

最后,打开你的“程序包管理控制台”。
.Net6使用EFCore在SqlServer上创建数据库_第14张图片
输入命令:Add-Migration Init
Init是一个更新字符串,随便写就行,每次更新数据库时不能一样。
在这里插入图片描述
输入命令:Update-Database
此命令用于提交更新到数据库。
看到Done则为成功。
.Net6使用EFCore在SqlServer上创建数据库_第15张图片
用SSMS打开数据库,可以看到新数据库的内容:
.Net6使用EFCore在SqlServer上创建数据库_第16张图片

你可能感兴趣的:(数据库,.net,sqlserver)