最近难得有时间闲下来,研究了一下.net core 2.0,总的来说,目前除了一些第三方的库不支持外,基本上可以满足我们的项目需求了!

我们就以一个网站开发为例,搭建一个简单的三层架构,先熟悉一下.net core 2.0的开发流程!

 一 、搭建项目框架

首先,我们新建项目,如图:

然后,我们分别添加.net core类库项目,NetCoreDemo.Repository(数据访问层)和NetCoreDemo.Service(服务层),项目结构如下:

 二 、初始化数据库

项目中, NetCoreDemo.Repository相当于三层中的DAL层,主要是与数据库交互!为了实现web项目和数据库解耦,方便将来更好数据库,我们在NetCoreDemo.Repository中安装EntiryFrameWorkCore,这里我们以SQL Server为例,安装下面两个安装包,在程序包管理控制台执行以下命名或者用Nuget包管理器安装均可:

Install-package Microsoft.EntityFrameworkCore
Install-package Microsoft.EntityFrameworkCore.SqlServer

然后,我们新建DbContext类,如MyDbContext,继承自DbContext,代码如下:

using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations; namespace NetCoreDemo.Repository
{
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options)
{
}
public DbSet<User> Uesrs { get; set; }
}
}

这里,我们新建一个User类作为测试,代码如下:

public class User
{
[Key]
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}

现在,DbContext建好了,下面我们连接数据库,还差一个数据库连接字符串,这个连接字符串我们通常是放在webconfig中的,那么.net core中应该放到哪里呢?

我们来到web项目下,看到有一个appsettings.json,里面内容如下:

{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}

我们就把数据库连接字符串放到这里吧,改完后,其内容如下:

{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionStrings": {
"SqlServer": "Data Source=.;Initial Catalog=netcore;User Id=sa;Password=123456;"
}
}

既然我们是Code First,下面准备创建数据库,生成表,执行Migration!

我们修改Startup.cs,修改ConfigureServices方法如下:

public void ConfigureServices(IServiceCollection services)
{
var connection = Configuration.GetConnectionString("SqlServer");
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(connection, b => b.MigrationsAssembly("NetCoreDemo")));
services.AddMvc();
}

这里需要注意的是,我们通过Configuration方法读取appsetting.json中的连接字符串,然后调用AddDbContext方法,把连接字符串传进去,这里要设置MigrationsAssembly为当前web项目,(这里大家可以试一下不设置这个,会报一个错误),这是因为我们执行Migration是在web项目下,下面我们打开DOS窗口,开始 -> 运行 -> CMD,定位到web项目根目录下,执行如下命令:

dotnet ef migrations add v1

这里,我们看到出现了错误,如图:

这里,我们修改项目文件,在项目上面右键,打开项目文件,如图:

在里面添加如下代码(任意位置均可):

  <ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
</ItemGroup>

加完后,如图:

然后,我们再次执行命令:

dotnet ef migrations add v1

如果出现Build faild的错误,重新生成一下项目,然后再次执行,执行成功后,如图:

这一步成功了,也就意味着,我们后面的路会很顺利了,下面我们更新到数据库,执行命令:

dotnet ef database update

等待一小会儿,执行成功后,我们会发现数据库中已经生成了我们的数据库和表了,这里我就不截图了,上传图片实在是太慢了~~

 三 、后续工作

上面,我们已经完成了数据库的创建,后面就可以开开心心的写代码了~~

作者:雲霏霏

QQ交流群:243633526

博客地址:http://www.cnblogs.com/yunfeifei/

声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

如果大家感觉我的博文对大家有帮助,请推荐支持一把,给我写作的动力。

.Net Core 2.0 EntityFrameworkCore CodeFirst入门教程的更多相关文章

  1. 在.Net Core中使用MongoDB的入门教程(一)

    首先,我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的. 所以,在我们安装好了MangoDB后,就可以开始MangoDB的.N ...

  2. 在.Net Core中使用MongoDB的入门教程(二)

    在上一篇文章中,讲到了MongoDB在导入驱动.MongoDB的连接,数据的插入等. 在.Net Core中使用MongoDB的入门教程(一) 本篇文章将接着上篇文章进行介绍MongoDB在.Net ...

  3. .Net Core 3.0 IdentityServer4 快速入门

    .Net Core 3.0 IdentityServer4 快速入门 一.简介 IdentityServer4是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架. 将 ...

  4. .Net Core 3.0 IdentityServer4 快速入门02

    .Net Core 3.0 IdentityServer4 快速入门 —— resource owner password credentials(密码模式) 一.前言 OAuth2.0默认有四种授权 ...

  5. 1.0 Android基础入门教程

    1.0 Android基础入门教程 分类 Android 基础入门教程 本教程于2015年7月开始撰写,耗时半年,总共148节,涵盖了Android基础入门的大部分知识,由于当时能力局限,虽已竭尽全力 ...

  6. .NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端

    .NET Core love gRPC 千呼万唤的 .NET Core 3.0 终于在 9 月份正式发布,在它的众多新特性中,除了性能得到了大大提高,比较受关注的应该是 ASP.NET Core 3. ...

  7. Asp.net Core 2.0+EntityFrameWorkCore 2.0添加数据迁移

    Asp.net Core 由于依赖注入的广泛使用,配置数据迁移,与Asp.net大不相同,本篇介绍一下Asp.net Core添加数据迁移的过程 添加Nuget包 Install-Package Mi ...

  8. lucene3.6.0 经典案例 入门教程

    第一步:下载并导入lucene的核心包(注意版本问题):  例如Lucene3.6版本:将lucene-core-3.6.0.jar拷贝到项目的libs 文件夹里.  例如Lucene4.6版本:将l ...

  9. Asp.Net Core中使用MongoDB的入门教程,控制台程序使用 MongoDB

    内容来源  https://blog.csdn.net/only_yu_yy/article/details/78882446 首先,创建一个.Net Core的控制台应用程序.然后使用NuGet导入 ...

随机推荐

  1. uva1629,Cake Slicing,记忆化搜索

    同上个题一样,代码相似度极高,或者说可以直接用一个模板吧 dp[i,j,p,q]表示一块长为j-i+1,宽为q-p+1,左上角在位置(i,j)上的蛋糕,dp[]表示当前状态下的最优值,然后对该块蛋糕枚 ...

  2. C# MessageBox.Show每隔3秒自动关闭

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  3. [Hdu1342] Lotto

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1342 题目大意:输出6--13从小到大个数,然后按顺序输出6个数,输出所有种可能. 解题思路:这题难度 ...

  4. python函数说明内容格式错误

    def levlTwo(levloneList,levlOneNum): """ 入参levloneList 一级城市列表 入参levlOneNum 用户选择的城市序号 ...

  5. DB---数据库中Schema的理解

    今天看到了Schema一词,对于它的理解网上也是说法很多,有一种受到认可的程度比较大,暂且先使用一下: " 首先我来做一个比喻,什么是Database,什么是Schema,什么是Table, ...

  6. Coredata中的多线程

    =================== 疑问: 1.coredata是什么?结构 2.如果在简单的demo中,我们可以在主线程中使用coredata.但是如果在真正的大项目中,这样可行么? 3.假设都 ...

  7. Bluetooth A2DP --Audio payload type

    数据结构: 字段解释: payload type: 0x60(96), dynamic type type 定义: https://www.iana.org/assignments/rtp-param ...

  8. 数据结构--KMP算法总结

    数据结构—KMP KMP算法用于解决两个字符串匹配的问题,但更多的时候用到的是next数组的含义,用到next数组的时候,大多是题目跟前后缀有关的 . 首先介绍KMP算法:(假定next数组已经学会, ...

  9. Linux中常见问题(磁盘 定时任务)

    第1章 linux无法上网 1)     第一步,先ping域名. ping www.baidu.com 2)再ping一个公网ip , ping 223.5.5.5/223.6.6.6/114.11 ...

  10. canvas图形编辑器

    原文地址:http://jeffzhong.space/2017/11/02/drawboard/ 使用canvas进行开发项目,我们离不开各种线段,曲线,图形,但每次都必须用代码一步一步的实现.有没 ...