架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13134|回复: 0

[.NET Core] 【实战】ASP.NET Core之Entity Framework Core入门教程

[复制链接]
发表于 2019-5-6 15:38:54 | 显示全部楼层 |阅读模式
Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。

EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。

数据库提供程序:https://docs.microsoft.com/zh-cn/ef/core/providers/index

本文所使用的环境:

  • 开放工具:VS 2017
  • dotnet版本:2.1.301
  • 数据库:sql sever 2012


创建项目

QQ截图20190506150914.jpg

1:BaiDuPan.WebUI是创建ASP.NET Core Web应用程序;

QQ截图20190506151032.jpg

2:BaiDuPan.DomainModel是创建类库(.NET Core);

添加Entity Framework Core引用

用vs2017开发.NET Framework项目的时候,在添加ef 6的时候,可以直接在项目右键添加,如下图:

QQ截图20190505173202.jpg

但是,ef core是无法通过上面方式来添加。

PM命令:


通过如上命令,程序会自动添加所需的依赖包,所以,无需添加Microsoft.EntityFrameworkCore包了。

添加上下文和实体模型

Movie电影模型:


PanDb数据库上下文:

Startup 类,添加数据库上下文依赖注入(这里需要WebUI添加DomainModel引用):


以上代码需要项目引用Microsoft.EntityFrameworkCore.SqlServer,但是BaiDuPan.WebUI没用引用Microsoft.EntityFrameworkCore.SqlServer,为什么还不报错呢?

Microsoft.AspNetCore.App 包中包含了 ASP.NET Core 2.1 及更高版本和 Entity Framework Core 2.1 及更高版本的所有功能。 面向 ASP.NET Core 2.1 及更高版本的默认项目模板使用此包。 建议面向 ASP.NET Core 2.1 及更高版本和 Entity Framework Core 2.1 及更高版本的应用程序使用 Microsoft.AspNetCore.App 包。


appsettings.json 配置数据库连接字符串:


试着启动项目,报错如下:

错误        NU1107        检测到 Microsoft.EntityFrameworkCore 存在版本冲突。直接从项目引用包可解决此问题。
BaiDuPan.WebUI -> BaiDuPan.DomainModel -> Microsoft.EntityFrameworkCore.SqlServer 2.2.4 -> Microsoft.EntityFrameworkCore.Relational 2.2.4 -> Microsoft.EntityFrameworkCore (>= 2.2.4)
BaiDuPan.WebUI -> Microsoft.AspNetCore.App 2.1.1 -> Microsoft.EntityFrameworkCore (>= 2.1.1 && < 2.2.0).        BaiDuPan.WebUI        C:\Users\itsvse_pc\Source\Repos\baidupan\BaiDuPan.WebUI\BaiDuPan.WebUI.csproj        1       

原因是两个项目之间版本有冲突,试着在BaiDuPan.WebUI安装高版本的ef core,新的错误如下:

PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2.4
  GET https://api.nuget.org/v3/registr ... qlserver/index.json
  CACHE https://api.nuget.org/v3/registr ... qlserver/index.json
正在还原 C:\Users\itsvse_pc\Source\Repos\baidupan\BaiDuPan.WebUI\BaiDuPan.WebUI.csproj 的包...
NU1608: 检测到的包版本在依赖项约束之外: Microsoft.AspNetCore.App 2.1.1 需要 Microsoft.EntityFrameworkCore.SqlServer (>= 2.1.1 && < 2.2.0),但版本 Microsoft.EntityFrameworkCore.SqlServer 2.2.4 已解决。
Install-Package : NU1107: 检测到 Microsoft.EntityFrameworkCore 存在版本冲突。直接从项目引用包可解决此问题。
BaiDuPan.WebUI -> Microsoft.EntityFrameworkCore.SqlServer 2.2.4 -> Microsoft.EntityFrameworkCore.Relational 2.2.4 -> Microsoft.EntityFrameworkCore (>= 2.2.4)
BaiDuPan.WebUI -> Microsoft.AspNetCore.App 2.1.1 -> Microsoft.EntityFrameworkCore (>= 2.1.1 && < 2.2.0).
所在位置 行:1 字符: 1
+ Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

Install-Package : 程序包还原失败。正在回滚“BaiDuPan.WebUI”的程序包更改。
所在位置 行:1 字符: 1
+ Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

已用时间: 00:00:01.4208784
PM>

QQ截图20190506144014.jpg

怎么办呢?解决方案如下:

降级,BaiDuPan.WebUI项目引用的是Microsoft.EntityFrameworkCore 2.1.1,所以我们在BaiDuPan.DomainModel项目重新执行nuget命令,如下:

这样,我们保证所有项目的ef core版本都是同一个版本就可以了。

初始化数据库

成功创建了数据库和表,如下图:

QQ截图20190506153301.jpg

添加MovieController控制器

代码如下:

Index方法是查询数据库Movie表的所有数据,Create方法是新增数据,我们先尝试新增一条数据,用postman请求,如下图:

https://localhost:44346/Movie/Create POST请求

QQ截图20190506153502.jpg
程序能够顺利执行,没有抛出异常,证明插入成功,尝试访问:https://localhost:44346/Movie 查询所有数据,如下图:

QQ截图20190506153650.jpg

至于修改和删除就不用说了吧!

参考资料:

Entity Framework Core:https://docs.microsoft.com/zh-cn/ef/core/

ASP.NET Core:https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-2.2&tabs=windows

(完)


评分

参与人数 1MB +1 贡献 +1 收起 理由
admin + 1 + 1 很给力!

查看全部评分





上一篇:有没有高手?
下一篇:逗号隔开字符串方法
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-27 05:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表