ASP.NET Core MVC EntityFramework core

appsetting.json中添加配置键值对(连接字符串)(Initial Catalog=MoviesDB为数据库名字)

{

    "ConnectionString": {
        "DefaultConnection": "Data Source=DESKTOP-RPEHIEB;User ID=sa;Password=666666;Initial Catalog=MoviesDB;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
    } 
}

Data文件夹下添加类(此文件夹,和类名字随意~)
类内容如下(要继承自Microsoft.EntityFrameworkCore.Dbcontext)
:base(options)将option传到父类中处理

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

        }
        public DbSet<MoviesInstanceClass> moviesInstanceClasses { get; set; }//数据模型映射(每一张table都需要一个DbSet进行映射)
    }

添加种子数据:

 //添加种子数据(这里是另一个程序的代码,HasData方法的参数中添加种子数据)
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<TouristRoute>().HasData(
                new TouristRoute{
                    Id=Guid.NewGuid(),
                    Tittle="杭州西湖",
                    Description="西湖的水是真的好喝",
                    OriginalPrice = 1688,
                    Features = "<p>西湖的水免费喝</p>",
                    Fees="路费自费,酒店8折",
                    Notes="喝水的时候不要太靠近水中央"
            },
            new TouristRoute{
                    Id=Guid.NewGuid(),
                    Tittle="吉林长春",
                    Description="净月潭美景",
                    OriginalPrice = 988,
                    Features = "<p>天气好,不冷不热</p>",
                    Fees="路费自费,门票免费",
                    Notes="小心蚊虫"
                }
                );
            base.OnModelCreating(modelBuilder);

这里推荐使用在Database文件夹下的json文件中存储种子文件

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //从Json读取种子数据
          // var JsonData =  File.ReadAllText(@"C:\Users\Flower-Li\source\repos\XiechengTravel\XiechengTravel\bin\Debug\net5.0\Database\TouristRouteData.json");
           var JsonData =  File.ReadAllText(Path.GetDirectoryName(Directory.GetCurrentDirectory()) + @"\XiechengTravel\Database\TouristRouteData.json");
            IList<TouristRoute> touristRoutes = JsonConvert.DeserializeObject<IList<TouristRoute>>(JsonData);//反序列化,将string=>object

            var jsonPicData =  File.ReadAllText(Path.GetDirectoryName(Directory.GetCurrentDirectory()) + @"\XiechengTravel\Database\TouristRoutePictureData.json");
            IList<TouristRoutePicture> touristRoutePictures = JsonConvert.DeserializeObject<IList<TouristRoutePicture>>(jsonPicData);

            modelBuilder.Entity<TouristRoute>().HasData(touristRoutes);
            modelBuilder.Entity<TouristRoutePicture>().HasData(touristRoutePictures);
            base.OnModelCreating(modelBuilder);
        }

在Startup类注册配置文件服务

        private readonly IConfiguration _configuration;

        public Startup(IConfiguration configuration)
        {
            //此Iconfiguration服务已在之前系统内注册
            this._configuration = configuration;
        }

再ConfigureServices方法中使用配置读取服务并添加数据库服务


 //拿到连接字符串ConnectionString下的DefaultConnection
            //var configurationString = _configuration["ConnectionString:DefaultConnection"];
            //第二种写法直接寻找ConnectionString下面的参数
            var configurationString = _configuration.GetConnectionString("DefaultConnectio");
            //添加链接
            services.AddDbContext<DataConntext>(
                options => {
                    options.UseSqlServer(configurationString);
                }
                );

数据库迁移

执行Add-Migration MoviesDB

遇到的问题
1.The entity type 'XXXX' requires a primary key to be defined.
一般是自己建立的实体类缺少字段属性与数据库字段相映射,检查类,并在主键上添加标识[key]

  1. 使用Add-Migration 命令的时候提示:
    Add-Migration : 无法将“Add-Migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    这个时候需要安装一个包 命令如下:Install-Package Microsoft.EntityFrameworkCore.Tools

3.无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题
在程序包管理器控制台执行如下命令:
Import-Module C:\Users\M6.nuget\packages\entityframework\6.4.4\tools\EntityFramework6.psd1

4.ASP.NET Core 3.1 "IServiceCollection"未包含"AddDefaultIdentity"的定义

AddDefaultIdentity方法是在Microsoft.AspNetCore.Identity.UI.dll这个包下,通过NuGet安装这个包,然后在StartUp.cs文件中添加引用即可。

执行update-Database -v(-v展示详细过程)

需要引入的几个Nuget
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.AspNetCore.Identity.UI

迁移完成

posted @ 2020-10-29 23:05  李花花小番茄  阅读(243)  评论(0)    收藏  举报