前言

相比大家也在开发中是非常喜欢用ORM的。今天就来介绍一下EntityFrameworkCore的使用方法。

自从EF Core升级到1.1之后,确实变化挺大的。如果没试过真的不知道坑是挺多的。今天将结合Asp.net Core 、EF Core 1.1和SqlServer来做个简单介绍,顺便把遇到的坑记录一下,以免以后忘记了。

项目结构

1.Asp.net core的WebApi(EFcoreDemo.Api)

2.EF core的standard libray (EFcoreDemo.DAL)

首先是用cmd新建解决方案,就是sln文件啦,输入以下脚本:

dotnet new sln -o EFcoreDemo
cd EFcoreDemo

之后分别建立上面说到的2个项目,运行下面2个脚本:

dotnet new classlib -o EFcoreDemo.DAL
dotnet new webapi -o EFcoreDemo.Api

加了这2个项目之后,其实解决方案上面还是没有这2个项目的,要运行下面的2个脚本:

dotnet sln add EFcoreDemo.DAL/EFcoreDemo.DAL.csproj
dotnet sln add EFcoreDemo.Api/EFcoreDemo.Api.csproj

这里要对项目的依赖关系进行处理,打开EFcoreDemo.Api.csproj文件,修改成这样

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup> <ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
</ItemGroup> <ItemGroup>
<ProjectReference Include="../EFcoreDemo.DAL/EFcoreDemo.DAL.csproj" />
</ItemGroup>
</Project>

之后运行一下dotnet restore恢复一下。

来到这里,项目结构就完成了。

加入EntityFramework Core

大家都知道.net core的引用都是要修改csproj文件的。然后我们在Api和DAL上都分别加上下面的引用

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.1" />

但是加了引用还是不够的,还需要加入EF core的工具。这里就变化比较大了。在EF core 1.0时我们只需要把Microsoft.EntityFrameworkCore.Tools加到Tools节点就可以了。但是在1.1的时候改了,变成Microsoft.EntityFrameworkCore.Tools.DotNet这个工具包。然后他的添加方法是这样的,把下面的整个代码加入到2个.csproj文件的Project节点下。

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

好了之后,分别对Api和DAL两个项目走一下dotnet restore

构建数据库

构建数据库实体,这里就简单处理先,下面是实体的所有代码

    public interface IEntityBase
{
int Id { get; set; }
} public class EntityBase : IEntityBase
{
[Key]
public virtual int Id { get; set; }
} [Table("People")]
public class People : EntityBase
{
[StringLength()]
public string Name { get; set; } public int Age { get; set; }
}

之后建立DbContext,

    public class MyDbContext : DbContext
{
public DbSet<People> Peoples { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer(@"Data Source=.\sqlexpress;Initial Catalog=mydb;Integrated Security=SSPI;");
} }

看起来一切就绪了,好的我们试试能生成migration文件不。根据以往的经验,需要在DAL的项目下走ef的脚本。按照ef tools的方案走以下脚本:

dotnet ef migrations add V001

然后提示了一串信息,但是到项目里面看,确实已经把migration文件加进来了

提示信息大概就说为了避免运行时的错误,最好能在加migration文件的时候,指定哪个项目作为启动项目。

好既然这样,我们就试试看怎么用Api项目作为启动,正确引用EF core。(上一步生成的migration文件先手动删除啦)

我们在Api里面的startup.cs文件中的ConfigureServices方案按照EF core的方法,加入以下代码:

services.AddDbContext<MyDbContext>(option =>
{
option.UseSqlServer(@"Data Source=.\sqlexpress;Initial Catalog=mydb;Integrated Security=SSPI;");
});

运行以下脚本

dotnet ef migrations add V001 --startup-project ../EFcoreDemo.Api

没想到这么容易就成功了,而且项目的migration文件也生成了。

之后我们运行以下脚本,看看是不是能真正建立数据库

dotnet ef database update --startup-project ../EFcoreDemo.Api

最终查看sql server,已经能正确建立数据库了。

到此,基本已经完成了

最后

之前在网络上有一些文章也有教怎么使用EF core 1.1, 但是他们有一个共同的缺点,就是所有Migration文件都是存放在Api项目内的,而不是DAL内。

所以那些方法不是真正能应用在项目中的。试想一下,如果migration在Api的项目中,这样DAL岂不是必须要有Api项目,才能记录完整的数据库迁移历史?这肯定是不正确的

Asp.net Core 使用 EntityFrameworkCore 1.1的更多相关文章

  1. ASP.NET Core使用EntityFrameworkCore CodeFrist

    1,安装环境: 如果是VS2015,确保已经升级至 update3或以上 .net core sdk (https://www.microsoft.com/net/download/core) vs2 ...

  2. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  3. 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 ...

  4. ASP.NET Core WebAPI 开发-新建WebAPI项目

    ASP.NET Core WebAPI 开发-新建WebAPI项目, ASP.NET Core 1.0 RC2 即将发布,我们现在来学习一下 ASP.NET Core WebAPI开发. 网上已经有泄 ...

  5. ASP.NET Core WebAPI 开发-新建WebAPI项目 转

    转 http://www.cnblogs.com/linezero/p/5497472.html ASP.NET Core WebAPI 开发-新建WebAPI项目   ASP.NET Core We ...

  6. ASP.NET Core学习之五 EntityFrameworkCore

    目的:运用EntityFrameworkCore ,使用codefirst开发 一.创建web项目 创建一个不进行身份验证的   ASP.NET Core Web Application (.NET ...

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

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

  8. ASP.NET Core 3.1 WebApi+JWT+Swagger+EntityFrameworkCore构建REST API

    一.准备 使用vs2019新建ASP.NET Core Web应用程序,选用api模板: 安装相关的NuGet包: 二.编码 首先编写数据库模型: 用户表 User.cs: public class ...

  9. ASP.NET Core 1.0 开发记录

    官方资料: https://github.com/dotnet/core https://docs.microsoft.com/en-us/aspnet/core https://docs.micro ...

随机推荐

  1. Java -- Properties类使用 读取配置文档

    Java-Properties类的使用 分类: Java基础 2007-05-11 19:35 2666人阅读 评论(1) 收藏 举报 propertiesxmlimportexceptionstri ...

  2. php如何判断电脑访问还是手机访问?

    手机上网用户数量越来越大,如今各网站都推出了手机网站,电脑用户访问时直接访问电脑版网页,当用户通过手机访问网站时则跳自动跳转到手机版网页,下面给大家分享一段php中判断电脑访问还是手机访问的代码: & ...

  3. ATL com的dll文件与tlb文件

    一..tlb文件: 只有COM组件才有tlb文件,普通dll文件没有. 包含内容: 1.它包含了COM类和接口的GUID值,接口的函数声明信息,并不是接口的实现文件.相当于类和接口的头文件. tlb文 ...

  4. codeforces 707D D. Persistent Bookcase(dfs)

    题目链接: D. Persistent Bookcase time limit per test 2 seconds memory limit per test 512 megabytes input ...

  5. hihocoder -1283 hiho密码(水题)

      时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho根据最近在密码学课上学习到的知识,开发出了一款hiho密码,这款密码的秘钥是这样生成的:对于一种有N个字母的语言 ...

  6. H264视频编码成MP4文件

    firehood的专栏 Wince嵌入式开发       目录视图 摘要视图 订阅 赠书 | AI专栏(AI圣经!<深度学习>中文版)      每周荐书:Kotlin.分布式.Keras ...

  7. SPOJ Query on a tree III (树剖(dfs序)+主席树 || Splay等平衡树)(询问点)

    You are given a node-labeled rooted tree with n nodes. Define the query (x, k): Find the node whose ...

  8. RenderingPath 渲染路径

    http://blog.csdn.net/lichaoguan/article/details/42554821 RenderingPath 渲染路径 Deferred Lighting 延时光照 延 ...

  9. 汇编题目:按A键,当松开的时显示字母A

    安装一个新的int9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏的“A”:其他的按键照常处理.提示:按下一个键时产生的扫描码称为通码,松开一个键时产生的扫描码称为断码 ...

  10. 装了Ironpython还需要装Python吗?

    IronPython 是一种在 NET 和 Mono 上实现的 Python 语言,由 Jim Hugunin(同时也是 Jython 创造者)所创造.IronPython是优雅的python编程语言 ...