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]
- 使用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
迁移完成

浙公网安备 33010602011771号