使用Code First(EF Core.Sqlite)

发布于:2023-01-08 ⋅ 阅读:(554) ⋅ 点赞:(0)

说到Code-first,与其对应的就是Database-First,Model-First和Code-first。

1.Database First是基于已存在的数据库,利用某些工具(如Vs提供的EF设计器)创建实体类数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件。
2.Model First 这种方式是先利用某些工具(如VS的EF设计器)设计出实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。
3.Code First 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象,这种方式在前一篇文章已经简单说过了。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。

总之一点,Database-First就是先有数据库,从数据库入手,Model-First和Code-first先从代码入手,再生成数据库。

使用EF Core建立Code First,完成数据库迁移。

使用sqlite数据库

1.建立一个.net core web api项目

2.安装Microsoft.EntityFrameworkCore.Sqlite

3. 建立一个实体

   public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int age { get; set; }
    }

4.建立DataContext

继承DbContext,初始化构造函数,继承base,再把User类写入

    public class DataContext : DbContext
    {
        public DataContext(DbContextOptions<DataContext> options)
            : base(options)
        {

        }

        public DbSet<User> Users { get; set; }
    }

5.配置数据库 

            var connrection = "FileName=./demo.db";
            services.AddDbContext<DataContext>(options =>
            {
                options.UseSqlite(connrection);
            });

这里可以把Sqlite,换成别的数据库地址

注意:这里必须写 FileName=./demo.db  否则后面生成的时候报错

6.安装Microsoft.EntityFrameworkCore.tools

7. 配置appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-previewl-final",
      "imports": [
        "portable-net 45+win8+dnxcore50",
        "portable-net 45+win8"
      ]
    }
  }
}

8.在程序包管理器控制台中,输入Add-Migration xxx

9.在输入Update-Database,创建数据库完成

 9.使用

别忘记 context.SaveChanges();

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication6.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;
        private readonly DataContext context;

        public WeatherForecastController(ILogger<WeatherForecastController> logger,DataContext context)
        {
            _logger = logger;
            this.context = context;
        }

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            User user = new User();
            user.age = 15;
            user.Id = 1;
            user.Name = "张三";
            context.Add(user);
            context.SaveChanges();
            var rng = new Random();

            var n = context.Users.Where(n => n.Name == "张三");
            foreach (var item in n)
            {
                Console.WriteLine(item.Name);
            }
           
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}

拓展

建立的类,最终都是要存到数据库中,上面的类并没有给字段增加注释或者数据的大小,主外键,约束等等条件,这些其实都可以增加,可以参考下面的链接。

Code First 数据注释 - EF6 | Microsoft Docs

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到