.Net Core建站(1):EF Core+CodeFirst数据库生成
emmm,本来想着用Core做一个小项目玩玩的,然后肯定是要用到数据库的,
然后想,啊,要不用CodeFirst,感觉很腻害的样子,于是,一脸天真无邪的我就踏入了一个深不见底的天坑。。。
本来想着,应该不是很难,多百度就好,辣么多大神都写了教程,
零零散散的花了将近三个星期时间,照着Demo写了N多次的我,不得不放弃了挣扎,
邀请了一位一起工作的大佬,看着他噼里啪啦调试了半个小时之后,就出现的数据库,莫名心塞,
大佬就是大佬,原谅小弟我才疏学浅,所以做一个笔记先,留着备用。。
我会边写博客,边做一个最简单的Demo,其实很多时候我们缺的,就是这些入门级的东西,
那些加了各种验证和功能的代码,反而会影响我们找到需要的代码。
工具:VS2017
环境:.Net Core 2.0 ,EF7
首先,我们需要的是建一个解决方案,一个类库项目,以及一个Web项目
这些建好之后的项目结构,应该是酱紫的
建好之后,就到了一个小关键了,我们要添加EF的依赖了,怎么添加呢?
网上看了好多方法,基本是都是使用工具=>NuGet包管理=>程序包管理控制台,来添加依赖,大概是酱紫:
可以先开着,待会儿用得着,不过我觉着这样有点麻烦,所以直接写在项目的工程文件(*.csproj)里面去了,要写的代码如下
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" />
</ItemGroup>
保存之后,Models的EF依赖就已经加入了,怎么知道是否成功呢?看这里,,,
以前是只有一个SDK的,现在多了个NuGet,里面还有俩东西,而且没有警告啊那些乱七八糟的东西,就表示没问题了,,
同样的,我们为WebFront项目,也加上依赖,,这里就不截图了,,,
走到这一步,我们就应该开始创建数据库的上下文和数据表了
创建数据库的上下文类(DBCodeFirst)和数据表类(DT_User),结构如下
DBCodeFirst的内容如下:
public class DBCoreFirst : DbContext
{
public DBCoreFirst() : base()
{ } public DBCoreFirst(DbContextOptions<DBCoreFirst> options)
: base(options)
{ } override protected void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
} #region 数据表 public DbSet<DT_User> DT_User { get; set; } #endregion }
DT_User的内容如下:
public class DT_User
{
/// <summary>
/// 默认int类型ID为主键
/// 必须有一个字段为主键,不然会报错
/// </summary>
public int ID { get; set; }
public string UserName { get; set; }
}
然后在WebFornt项目的Startup类的ConfigureServices方法中写一段代码,连接字符串中的DataBase写的数据库名称是啥,生成的数据库名称就是啥,可以和你的上下文类名称不一致
这时候,我们再来看看数据库的情况,是没有DBCodeFirst这个库的
重头戏到了,还记得开始打开的程序包管理控制台么?
打开它,输入命令,Add-Migration *****(这块儿随意)
Add-Migration DBCoreFirst
在执行它的时候,我报了好几个错,一一列举出来
第一个报错
GenericArguments[], 'Models.Migrations.DBCoreFirst',
on 'Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory`1[TContext]' violates the constraint of type 'TContext'.
genericarguments [ 0 ],”模型。迁移。dbcorefirst ','微软。entityframeworkcore。设计。idesigntimedbcontextfactory ` 1 [ tcontext ]“违背类型的tcontext约束。
这个报错的锅在图中,我用红框框起来的地方,默认项目 ,对,没错,就是它,应该改成WebFonrt,
改好之后,我们继续执行Add-Migration DBCoreFirst
紧接着,报了第二个错
Could not load assembly 'WebFront'. Ensure it is referenced by the startup project 'Models'. 未能加载程序集“webfront”。确保它由启动项目的“Models”引用。
这个报错的锅呢,看到我箭头的尾部了么,在哪里?是Models项目吧,现在这个项目是加粗的,表示它是启动项目,
更改启动项目为WebFornt项目,很好,第二个坑被我填了,继续运行Add-Migration DBCoreFirst
第三个坑接踵而至
Your target project 'WebFront' doesn't match your migrations assembly 'Models'. Either change your target project or change your migrations assembly. 你的目标项目webfront不迁移组件模型匹配”。要么更改目标项目,要么更改迁移程序集。
其实这个坑也不算大,强行往下走也是能生成数据库的,但是,对我这个强迫症来说,哪里容得下飘红??
于是百度,查看了相关资料后,我知道问题出在了哪里,就是箭头尾部的第28行代码
services.AddDbContext<DBCoreFirst>(options => options.UseSqlServer(connection));
改为
services.AddDbContext<DBCoreFirst>(options => options.UseSqlServer(connection, c => c.MigrationsAssembly("WebFront")));
很好,没有飘红了,可是,在图中黄色框中,会对应的生成一些文件,
按我的理解,这些文件不是什么日志文件,就是用来数据表映射的,所以,这些文件应该出现在Models中,而不是WebFront
一系类百度后,,好像没找着,只能自己点点点,
发现了第四个坑
首先,将代码还原,
services.AddDbContext<DBCoreFirst>(options => options.UseSqlServer(conStr));不变
然后我们回到第一个坑,将默认项目从“WebFront”改为“Models”
然后执行Add-Migration DBCoreFirst
很稳,现在四个地方都对了,然后我们看看数据库,这个时候还没有生成对应的库
然后我们执行第二段命令Update-DataBase
然后,幸运的我又遇到了第五个坑
GenericArguments[], 'Models.Migrations.DBCoreFirst',
on 'Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory`1[TContext]' violates the constraint of type 'TContext'. genericarguments [ ],”模型。迁移。dbcorefirst ','微软。entityframeworkcore。
设计。idesigntimedbcontextfactory ` [ tcontext ]“违背类型的tcontext约束。
打开一个由命令生成的文件看看
两个类的名称一毛一样,数据库又是根据DBCodeFirst这个类来生成的,不出问题就见鬼了,,
那么,左边的类名为什么会和右边的一样??
问题在于我们执行的“Add-Migration DBCoedFirst“命令
Add-Migration DBCodeFirst
改为
Add-Migration DBLog
执行之后的效果,很明显的变了
紧接着,执行命令“Update-DataBase”
然后,我们去数据库看看
很稳,数据库生成了,EF会自动生成__EFMigrationsHistory表,好像是用来记录数据迁移日志的,咱们现在忽略就好
至此,EF7的CodeFirst生成数据库就完成了,,
自我感觉,写完这一篇,我打马赛克的技术也越来越稳了,,,
.Net Core建站(1):EF Core+CodeFirst数据库生成的更多相关文章
- .Net Core建站(3):搭建三层架构
啊,终于到写三层架构的时候了,老实说,我都不知道自己这个算不算三层架构,姑且就当它是吧,具体属于哪一个体系,希望有大佬指点一下(^o^)/ 不晓得有人注意到没有,我写了三篇博客,然后就改了三次标题ヽ( ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- ASP.NET Core 开发 - Entity Framework (EF) Core
EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...
- .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介
.NET Core 1.0.ASP.NET Core 1.0和EF Core 1.0简介 英文原文:Reintroducing .NET Core 1.0, ASP.NET Core 1.0, and ...
- 在.NET Core类库中使用EF Core迁移数据库到SQL Server
前言 如果大家刚使用EntityFramework Core作为ORM框架的话,想必都会遇到数据库迁移的一些问题. 起初我是在ASP.NET Core的Web项目中进行的,但后来发现放在此处并不是很合 ...
- [翻译 EF Core in Action 1.9] 掀开EF Core的引擎盖看看EF Core内部是如何工作的
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- 【.Net Core 学习系列】-- EF Core 实践(Code First)
一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二解决方案: 新建项目: File --> New --> Project --> ...
- 【.Net Core 学习系列】-- EF Core实践(DB First)
一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二.准备数据: CREATE DATABASE [Blogging]; GO USE [Blogging ...
- 在Asp.Net Core 5 中使用EF Core连接MariaDB
升级到Asp.Net Core 5,使用EF Core连接MariaDB,使用的Nuget包Pomelo.EntityFrameworkCore.MySql也升级到了5.0.0-alpha.2,然后发 ...
随机推荐
- openwrt上wifi探针的实现----mt7620a+rt2860v2
openwrt上wifi探针的实现----mt7620a+rt2860v2 [摘要:甚么是wifi探针 看到探针,感到很矮小上的模样,实在便是经过wifi汇集经由那个AP局限的脚机的mac地点,出有甚 ...
- 驳“C语言已经死了”
http://blog.csdn.net/xushiweizh/article/details/1476422
- Jmeter线程组使用详解,持续加压线程组详解
以下罗列的是Jmeter 所有线程组的详解,包括官方自带的线程组,和官方插件的线程组.官方线程组安装,详见之前的文章:https://www.cnblogs.com/beimingyouyuqingc ...
- 简易数据分析 15 | Web Scraper 高级用法——CSS 选择器的使用
这是简易数据分析系列的第 15 篇文章. 年末事情比较忙,很久不更新了,后台一直有读者催更,我看了一些读者给我的私信,发现一些通用的问题,所以单独写篇文章,介绍一些 Web Scraper 的进阶用法 ...
- head插件安装-elasticsearch
1.安装node环境: 下载地址:https://nodejs.org/download/release/v8.13.0/node-v8.13.0-linux-x64.tar.gz gunzip n ...
- 分布式事务框架-seata初识
一.事务与分布式事务 事务,在数据库中指的是操作数据库的最小单位,往大了看,事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消. 那为什么会有分布式事务呢 ...
- [NoSQL] 从模型关系看 Mongodb 的选择理由
往期:Mongodb攻略 回顾 Mongodb 与关系型数据库的对应关系: MySQL MongoDB database(数据库) database(数据库) table(表) collectio ...
- spring cloud 微服务之 -- 配置文件拆分之道
0-前言 在spring cloud微服务架构中,基本上每个拆分的微服务都会部署多个运行实例,这些运行实例,配置基本都是一样的,不同的是少数配置,比如端口,而这些不同的配置又是必不可少的 那我们怎么来 ...
- 「CH2501」 矩阵距离 解题报告
CH2501 矩阵距离 描述 给定一个N行M列的01矩阵 A,\(A[i][j]\) 与 \(A[k][l]\) 之间的曼哈顿距离定义为: \(dist(A[i][j],A[k][l])=|i-k|+ ...
- 1076 Wifi密码 (15 分)C语言
下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同学们自己作答 ...