.Net Core建站(1):EF Core+CodeFirst数据库生成
emmm,本来想着用Core做一个小项目玩玩的,然后肯定是要用到数据库的,
然后想,啊,要不用CodeFirst,感觉很腻害的样子,于是,一脸天真无邪的我就踏入了一个深不见底的天坑。。。
本来想着,应该不是很难,多百度就好,辣么多大神都写了教程,
零零散散的花了将近三个星期时间,照着Demo写了N多次的我,不得不放弃了挣扎,
邀请了一位一起工作的大佬,看着他噼里啪啦调试了半个小时之后,就出现的数据库,莫名心塞,
大佬就是大佬,原谅小弟我才疏学浅,所以做一个笔记先,留着备用。。
我会边写博客,边做一个最简单的Demo,其实很多时候我们缺的,就是这些入门级的东西,
那些加了各种验证和功能的代码,反而会影响我们找到需要的代码。
工具:VS2017
环境:.Net Core 2.0 ,EF7
首先,我们需要的是建一个解决方案,一个类库项目,以及一个Web项目
这些建好之后的项目结构,应该是酱紫的
建好之后,就到了一个小关键了,我们要添加EF的依赖了,怎么添加呢?
网上看了好多方法,基本是都是使用工具=>NuGet包管理=>程序包管理控制台,来添加依赖,大概是酱紫:
可以先开着,待会儿用得着,不过我觉着这样有点麻烦,所以直接写在项目的工程文件(*.csproj)里面去了,要写的代码如下
1 <ItemGroup> 2 <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.1" /> 3 <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" /> 4 </ItemGroup>
保存之后,Models的EF依赖就已经加入了,怎么知道是否成功呢?看这里,,,
以前是只有一个SDK的,现在多了个NuGet,里面还有俩东西,而且没有警告啊那些乱七八糟的东西,就表示没问题了,,
同样的,我们为WebFront项目,也加上依赖,,这里就不截图了,,,
走到这一步,我们就应该开始创建数据库的上下文和数据表了
创建数据库的上下文类(DBCodeFirst)和数据表类(DT_User),结构如下
DBCodeFirst的内容如下:
1 public class DBCoreFirst : DbContext 2 { 3 public DBCoreFirst() : base() 4 { 5 6 } 7 8 public DBCoreFirst(DbContextOptions<DBCoreFirst> options) 9 : base(options) 10 { 11 12 } 13 14 override protected void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 15 { 16 base.OnConfiguring(optionsBuilder); 17 } 18 19 #region 数据表 20 21 public DbSet<DT_User> DT_User { get; set; } 22 23 #endregion 24 25 }
DT_User的内容如下:
1 public class DT_User 2 { 3 /// <summary> 4 /// 默认int类型ID为主键 5 /// 必须有一个字段为主键,不然会报错 6 /// </summary> 7 public int ID { get; set; } 8 public string UserName { get; set; } 9 }
然后在WebFornt项目的Startup类的ConfigureServices方法中写一段代码,连接字符串中的DataBase写的数据库名称是啥,生成的数据库名称就是啥,可以和你的上下文类名称不一致
这时候,我们再来看看数据库的情况,是没有DBCodeFirst这个库的
重头戏到了,还记得开始打开的程序包管理控制台么?
打开它,输入命令,Add-Migration *****(这块儿随意)
1 Add-Migration DBCoreFirst
在执行它的时候,我报了好几个错,一一列举出来
第一个报错
GenericArguments[0], '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[0], 'Models.Migrations.DBCoreFirst', on 'Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory`1[TContext]' violates the constraint of type 'TContext'.genericarguments [ 0 ],”模型。迁移。dbcorefirst ','微软。entityframeworkcore。 设计。idesigntimedbcontextfactory ` 1 [ tcontext ]“违背类型的tcontext约束。
打开一个由命令生成的文件看看
两个类的名称一毛一样,数据库又是根据DBCodeFirst这个类来生成的,不出问题就见鬼了,,
那么,左边的类名为什么会和右边的一样??
问题在于我们执行的“Add-Migration DBCoedFirst“命令
Add-Migration DBCodeFirst 改为 Add-Migration DBLog
执行之后的效果,很明显的变了
紧接着,执行命令“Update-DataBase”
然后,我们去数据库看看
很稳,数据库生成了,EF会自动生成__EFMigrationsHistory表,好像是用来记录数据迁移日志的,咱们现在忽略就好
至此,EF7的CodeFirst生成数据库就完成了,,
自我感觉,写完这一篇,我打马赛克的技术也越来越稳了,,,
转载于:https://www.cnblogs.com/Onlooker/p/8047176.html
.Net Core建站(1):EF Core+CodeFirst数据库生成相关推荐
- 在.NET Core类库中使用EF Core迁移数据库到SQL Server
前言 如果大家刚使用EntityFramework Core作为ORM框架的话,想必都会遇到数据库迁移的一些问题. 起初我是在ASP.NET Core的Web项目中进行的,但后来发现放在此处并不是很合 ...
- 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 ...
- .Net Core建站(2):EF Core+CodeFirst数据库迁移
上一篇的话,说了下怎么使用EF7 实现 CodeFirst去生成数据库, 其实还有好多问题的,这次一点一点的解决吧,都挺简单,不过零零散散的,, 1.读取配置文件,获得链接字符串 2.使用数据库进行增 ...
- .net core Entity Framework 与 EF Core
重点讲 Entity Framework Core ! (一)Entity Framework 它是适用于.NET 的对象关系映射程序 (ORM),现在的EF6已经是久经沙场,并经历重重磨难,获得一致 ...
- (一)NET Core 项目中通过EF Core的Code First方式进行数据库的迁移
EF Core 是现有EF库的修改版本,具有可扩展的,轻量级的和跨平台的支持.它支持关系型数据库和非关系型数据库.还支持"代码优先"或"数据库优先"方法作为编程 ...
- EF使用CodeFirst方式生成数据库技巧经验
前言 EF已经发布很久了,也有越来越多的人在使用EF.如果你已经能够非常熟练的使用EF的功能,那么就不需要看了.本文意在将自己使用EF的方式记录下来备忘,也是为了给刚刚入门的同学一些指导.看完此文,你 ...
- PageAdmin CMS 建站软件Sql Server2008 R2数据库安装教程
在安装pageadmin CMS的时候会遇到的问题可以进入官网看教程, sql sever数据库建议安装sql2008或以上版本,如果电脑上没有安装数据库,参考下面步骤安装. sql2008 r2下载 ...
- 基于ZKEACMS的.Net Core多租户CMS建站系统
多租户架构 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下共用相同的系统或程序组件,并且可确保各用户间数据的隔离性.简单讲:在一台服务器上运行单个应用实例,它为 ...
- EF Core的学习之路01
本文章是我听B站杨中科的所做的笔记 杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili 什么时ORM 1.说明:本课程需要你有数据库.S ...
最新文章
- 国内操作系统OS分析(上)
- exchange 2010 中OAB 排错一例
- Qt 清空QPixMap
- WPF插件开发:使用FrameworkElementAdapters时VS报错的问题
- 代写python代码一般多少钱_代写CO 353课程作业、代做Python程序设计作业、代写Python语言作业...
- MyBatis-Plus_通用service
- hive分桶表join_Hive知识梳理
- 国庆七天乐 Day7
- python猜积木_Python中乐高积木——函数
- Iptables 网络安全
- 收集表的使用与批量图片下载
- crash常用的调试命令
- ppt流程图箭头分叉_实用模版大全(最全箭头、流程图).ppt
- python实现B站自动发弹幕_python代码
- LaTeX制作表格---学习笔记
- 操作系统系统概述——云计算
- 使用 dva 如何配置异步加载路由组件
- Pollard-Rho算法模板(POJ 1811 Prime Test)
- 使用Python批量筛选上千个Excel文件中的某一行数据并另存为新Excel文件(下篇)
- 不小心删除了华为手机备忘录里的内容如何恢复?
热门文章
- boost::describe模块宏BOOST_DESCRIBE_PP_POINTER的测试程序
- GDCM:DICOM转储到SQLITE3的测试程序
- VTK:可视化之ColorAnActor
- VTK:相互作用之MoveAVertexUnstructuredGrid
- OpenCV将GIS数据加载到OpenCV容器中的实例(附完整代码)
- C++Eratosthenes埃氏筛法获取素数列表的实现算法(附完整源码)
- QT绘制散点图(2)
- QT的QSGGeometry类的使用
- QML基础类型之font
- 经典C语言程序100例之八九