说明:搭建netcore 使用efcore入门教程,跟着这个教程,傻瓜都可以成功!O(∩_∩)O哈哈~,咱们开始吧;

首先介绍下环境:

  vs2017,

  netcore2.2,

  EntityFramework6

  测试场景:Mysql,SqlServer

一、创建netcore模板项目

这个就不用多说了,创建完成看下版本:

二、引用EF Core

有的博主写的这样引用:Install-Package Microsoft.EntityFrameworkCore.Sqlite –Pre

但是,遗憾的是,报错了:

然后我自己引用了以包,OK

为了方便复制,我直接复制出来:

1.Microsoft.EntityFrameworkCore
2.Install-Package Microsoft.EntityFrameworkCore.Sqlite
3.Install-Package Microsoft.EntityFrameworkCore.Design
4.Install-Package Microsoft.EntityFrameworkCore.Tools

项目结构如下:

 三、创新测试的实体类

我这边创建了一个DBModel文件夹,然后分别创建了三个类:

OrderInfo.cs,

Passenger.cs,

Address.cs

为什么要创建这么几个呢:因为后续会设计到表之间关联关系,主键,外键,引用等等,当然,本文主要是入门,后面的文章会详细讲解;

(PS:关系:一个OrderInfo有一个Passenger和一个Address,一个Passenger又可以有多个OrderInfo和一个Address);

强调:需要引用MySql.Data.EntityFrameworkCore

OrderInfo.cs

[MySqlCharset("utf8mb4")] //字符集,需要引用MySql.Data.EntityFrameworkCore
[MySqlCollation("utf8mb4_general_ci")] //排序规则
[Table("orderinfo", Schema = "manager")]
public class OrderInfo {[JsonProperty("id")]
[Required]
[Column("id", TypeName = "int(11)")]
public int Id { get; set; }/// <summary>
/// 订单Id
/// </summary>
[JsonProperty("order_id")]
[Required]
[Column("order_id", TypeName = "int(11)")]
public int OrderId { get; set; }[JsonProperty("passengerid")]
[Column("passenger_id",TypeName ="int(11)")]
public int PassengerId { get; set; }[JsonProperty("addressid")]
[Column("address_id", TypeName = "int(11)")]
public int AddressId { get; set; }/// <summary>
/// 订单价格
/// </summary>
[StringLength(maximumLength: 100)]
[Column("price")]
public string Price { get; set; }/// <summary>
/// 订单客人信息
/// </summary>
[ForeignKey("PassengerId")]
public Passenger OrderForPassenger { get; set; }/ <summary>
/ 订单地址信息
/ </summary>
//[InverseProperty("OrderInfos")]
//public Address OrderForAddress { get; set; }

  

  

Passenger.cs

 [MySqlCharset("utf8mb4")] //字符集,需要引用MySql.Data.EntityFrameworkCore[MySqlCollation("utf8mb4_general_ci")] //排序规则[Table("passenger", Schema = "manager")]public class Passenger {[JsonProperty("id")][Column("id", TypeName = "int(10)")]public int Id { get; set; }[JsonProperty("passenger_id")][Column("passengerid",TypeName ="int(11)")]public int PassengerId { get; set; }[JsonProperty("passengername")]public string PassengerName { get; set; }[InverseProperty("OrderForPassenger")]public List<OrderInfo> OrderInfos { get; set; }//[InverseProperty("Passengers")]//public Address PssengerForAddress { get; set; }}

  

Address.cs

 [MySqlCharset("utf8mb4")] //字符集,需要引用MySql.Data.EntityFrameworkCore[MySqlCollation("utf8mb4_general_ci")] //排序规则[Table("address", Schema = "manager")]public class Address {[JsonProperty("id")][Required]public int Id { get; set; }[JsonProperty("province")][StringLength(maximumLength: 256)]public string Province { get; set; }[JsonProperty("city")][StringLength(maximumLength: 256)]public string City { get; set; }[JsonProperty("area")][StringLength(maximumLength: 256)]public string Area { get; set; }[JsonProperty("street")][StringLength(maximumLength:256)]public string Street { get; set; }}

  

 四、创建一个DataDBContext.cs类,代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

public class DataDBContext:DbContext {

      public DataDBContext(DbContextOptions<DataDBContext> options)

          base(options) {

      }

      /// <summary>

      /// 订单

      /// </summary>

      public DbSet<OrderInfo> OrderInfos { getset; }

      /// <summary>

      /// 乘客

      /// </summary>

      public DbSet<Passenger> Passengers { getset; }

      /// <summary>

      /// 地址

      /// </summary>

      public DbSet<Address> Addresses { getset; }

  }

 

 五、创建数据库初始化和连接

为了方便测试,将数据库连接配置放在了appsettings.json文件中了。配置文件内容如下:

{"Logging": {"LogLevel": {"Default": "Warning"}},"AllowedHosts": "*","ConnectionSetting": {"UserConnectionString": "server=localhost;userid=root;pwd=123456;port=3306;database=manager","ReadConnectionString": "server=localhost;userid=root;pwd=123456;port=3306;database=manager","DbType": 0 //数据库类型}
}

在StartUp.cs中注册连接:

  services.AddDbContext<DataDBContext>(optionsBuilder => {var dataAppSetting = Configuration.GetSection("ConnectionSetting").Get<ConnectionSetting>();if (dataAppSetting == null) {throw new Exception("未配置数据库连接");}switch (dataAppSetting.DbType) {case 1://server连接,EnableRetryOnFailure表示失败支持重试;optionsBuilder.UseSqlServer(dataAppSetting.UserConnectionString, option => option.EnableRetryOnFailure());break;default:optionsBuilder.UseMySQL(dataAppSetting.UserConnectionString);break;}});

这里可能有朋友会问一下,万一数据库没有创建怎么办?

所以,这里Configure方法加一下内容

context.Database.EnsureCreated();//数据库不存在的话,会自动创建

六、打开对应文件目录,执行

打开文件夹的命令行,

输入

  dotnet ef migrations add MyFirstMigration

  dotnet ef database update

这样我们就创建好了数据库。更多命令请 dotnet ef -h

可以看到,里面其实是执行了创建数据库表的sql语句!

那我,我们来看一下我数据库,结果如下:

有的朋友可能会问,为啥多了一个表:“_efmigrationshistory”,故名思义,这个表示执行操作的记录,因为可能对表增加字段,修改字段,删除字段等等;

当然只是一个记录:

运行完成之后,我们会发现,我们会多一个Migrations文件夹

里面的内容是什么呢,大家可以打开看看,下面是我的部分截图:

可以看到,这些都是我们之前创建实体时的一些属性,如果是第一次尝试的朋友也没有必要设置这么多。

七、测试效果 

简单写了个demo测试效果

话不多说,直接上代码:

Index.cshtml

@model IEnumerable<EfCoreDemo.DbModel.Address>@{ViewBag.Title = "地址";
}
<table class="table"><tr><th>Id</th><th>省</th><th>市</th><th>区</th><th>街道详细地址</th></tr>@foreach (var item in Model) {<tr><td>@Html.DisplayFor(modelItem => item.Id)</td><td>@Html.DisplayFor(modelItem => item.Province)</td><td>@Html.DisplayFor(modelItem => item.City)</td><td>@Html.DisplayFor(modelItem => item.Area)</td><td>@Html.DisplayFor(modelItem => item.Street)</td></tr>}
</table>

AddAddress.cshtml

@model EfCoreDemo.DbModel.Address
@{ViewData["Title"] = "Address";
}
<form asp-controller="Address" asp-action="AddAddress" method="post"><div class="form-group"><label asp-for="Province" class="col-md-2 control-label">省:</label><div class="col-md-10"><input class="form-control" asp-for="Province" /><span asp-validation-for="Province" class="text-danger"></span></div><label asp-for="City" class="col-md-2 control-label">市:</label><div class="col-md-10"><input class="form-control" asp-for="City" /><span asp-validation-for="City" class="text-danger"></span></div><label asp-for="Area" class="col-md-2 control-label">区:</label><div class="col-md-10"><input class="form-control" asp-for="Area" /><span asp-validation-for="Area" class="text-danger"></span></div><label asp-for="Street" class="col-md-2 control-label">街道门牌号:</label><div class="col-md-10"><input class="form-control" asp-for="Street" /><span asp-validation-for="Street" class="text-danger"></span></div><div class="col-md-offset-2 col-md-10"><input type="submit" value="保存" class="btn btn-success" /></div></div>
</form>

AddressController.cs

 public class AddressController : Controller{private DataDBContext _context;public AddressController(DataDBContext context) {_context = context;}public IActionResult Index(){return View(_context.Addresses.ToList());}public IActionResult AddAddress() {return View();}[HttpPost][ValidateAntiForgeryToken]public IActionResult AddAddress(Address address) {if (ModelState.IsValid) {_context.Addresses.Add(address);_context.SaveChanges();return RedirectToAction("Index");}return View(address);}

运行效果:

至此,初级版本搭建成功,且运行成功;

后记:本文主要是记录一下netcore怎么搭建efcore,只属于基础,自己学习的过程中也方便跟大家一起探讨,我们使用数据库的时候,不可能只有单独的几张表,

一般都会有主键,外键,索引,组合索引等等,

或者对表的操作,删除,修改,新增字段等等;

后续会继续更新更多的efcore的东西,如有问题,欢迎一起讨论。

感谢以下文章提供的启发:

参考博客:https://www.cnblogs.com/liangxiaofeng/p/5806347.html

参考文档:https://docs.microsoft.com/zh-cn/ef/core/get-started/netcore/new-db-sqlite

netcore使用EFcore(第一个实例)相关推荐

  1. .NetCore中EFCore for MySql整理(二)

    一.简介 EF Core for MySql的官方版本MySql.Data.EntityFrameworkCore 目前正是版已经可用当前版本v6.10,对于以前的预览版参考:http://www.c ...

  2. Highmaps网页图表教程之Highmaps第一个实例与图表构成

    Highmaps网页图表教程之Highmaps第一个实例与图表构成 Highmaps第一个实例 下面我们来实现本教程的第一个Highmaps实例. [实例1-1:hellomap]下面来制作一个中国地 ...

  3. java mye,JAVA-MyEclipse第一个实例

    MyEclipse第一个实例 1.打开MyEclipse程序. 2.在PacKage视图->右击->New|Web Project. 3.在"New Web Project&qu ...

  4. 从零学Java(3)之第一个实例HelloWorld

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  5. 代码重构——第一个实例

    0 引言 随着"互联网+"的普及,互联网行业得到了快速蓬勃发展,使得现实生活中人们对互联网产品的需求逐渐增加,促使互联网产品功能越来越复杂,项目逐渐失去有效的管理.为满足项目功能上 ...

  6. hadoop跑第一个实例过程

    第一次跑hadoop实例,中间经过了不少弯路,特此记录下来: 第一步:建立一个maven过程,pom.xml文件:(打包为jar包) <dependency><groupId> ...

  7. .NetCore中EFCore的使用整理

    EntirtyFramework框架是一个轻量级的可扩展版本的流行实体框架数据访问技术. 其中的.NetCore版本对应EntityFrameworkCore Git源代码地址:https://git ...

  8. XSLT基本语法和第一个实例

    人家都说XSLT转换技术是XML的一项重要技术,俺也没有机会在项目里运用,就在网上瞎搜搜,找点学习学习,所以下面我写的自己的学习结果有可能跟哪位老兄有些许雷同,纯属巧合哈,先申明. 首先说下XSL的主 ...

  9. openstack学习笔记三 创建第一个实例

    登陆admin 创建一个基本网络 镜像   已经安装好操作系统的硬盘文件 计算--镜像--创建镜像 名称  centos7.2-1511 镜像源  镜像地址 镜像地址    http://mirror ...

最新文章

  1. myeclipse快捷键大全
  2. linux禁止客户端上传文件_Linux下Shell脚本实现FTP自动上传和下载文件
  3. kswapd进程与swap、swappiness之间的关系及原理
  4. paip. 解决java程序不能自动退出
  5. NTKO控件的一些基本方法属性
  6. 统计自然语言处理(第二版)学习笔记:第一章
  7. 十大自动化软件测试工具
  8. 如何去掉百度地图 信息框的白色箭头
  9. 电脑使用小常识(4):让win10强制更新棍淡
  10. 4p营销组合策略案例_营销组合策略的4P讲解
  11. Codeforces Round #703 (Div. 2)C1C2 Guessing the Greatest(二分)
  12. 机器视觉工程师应该知道的23个工业镜头专业术语
  13. 我TM究竟应该选哪个版本的MySQL?!
  14. spring @Autowired用法
  15. 爬取安居客租房详情+翻页
  16. JavaPoet动态生成代码,高薪程序员必会
  17. 浅析Content Negotation在Nancy的实现和使用
  18. 用lxml的xpath演示爬虫提取笑话集网页其中的标题,url,浏览数,日期,笑话内容
  19. BOM系列之Navigator对象
  20. 计算机安全模式启动时蓝屏,电脑蓝屏开机按f8进入安全模式后还是蓝屏的,怎么处理?...

热门文章

  1. 程序员会不会成为一个高危行业?
  2. Qt5.14.2移植到SOM-RK3399开发板上的问题解决办法
  3. 【瑞吉外卖项目】DAY5——第六章 手机验证码登录
  4. 云计算(二):云计算的三种服务模式
  5. The Golem Group/University of California at Los Angeles Autonomous Ground Vehicle in the DARPA Grand
  6. 群晖下自建Discuz论坛访问时出现” Discuz! Database Error (2002) notconnect”错误解决方案。
  7. 增收不增利的良品铺子,能比三只松鼠更快找到新赛道吗?
  8. HTML中滚动条滚动时如何让上面的标题固定不动
  9. 令人蛋疼的《西游记》。不笑,你拍我!
  10. 开发中实用CSS干货(持续不稳定更新)