应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

Net Core使用EF之DB First

12922人阅读 2019/1/30 20:22 总访问:5182174 评论:0 收藏:0 手机
分类: .NET Core


一.新建一个.net core的MVC项目


新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖



 二.使用Nuget添加EF的依赖


输入命令:  Install-Package Microsoft.EntityFrameworkCore.SqlServer

安装成功后就可以在依赖项中看到

注意执行命令的项目你可能需要选择一下


 三.如果是使用db first,需要根据数据库生成model,就还需要使用命令添加两个依赖


Install-Package Microsoft.EntityFrameworkCore.Tools(其实3.1要执行命令生成只下这一个就可以了)

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design


安装成功后就可以在依赖项中看到



四.相关依赖添加成功后,就可以更具一个命令就可以从数据库生成model了  

 

命令:    Scaffold-DbContext "Server=.;Database=Food;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models


-OutputDir Models的意思是把生成的实体和上下文都输出到Models这个文件夹如果不需要这样直接输出到当前类库中不接即可


注意:有可能执行这个命令会报错:

 1:执行这一步的时候出现了点问题 ,因为系统是win7,powershell版本太低了,不支持这个命令,需要安装

3.0以上的powershell版本才行      


2: Could not load assembly 'DAL'. Ensure it is referenced by the startup project 'xxxx'.

是因为主项目没有添加到这个DAL层的引用,添加了就行了,所以估计执行这个命令会使用到启动项目的一些东西


3:Your startup project 'xxxxx' doesn't reference Microsoft.EntityFrameworkCore.Design.This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again.

他是说你启动项目没有这个依赖,在启动项目里边执行一下这个两个命令就好了

Install-Package Microsoft.EntityFrameworkCore.Tools

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

好像执行执行那个.Tools也可以,我就奇怪了nuget执行的明明不是启动项目为什么启动项目中还要添加这个依赖呢,

只在启动项目添加这个依赖行不行呢


如果model已经生成过了,想全部覆盖的话,可以在后面加一个-force命令:

Scaffold-DbContext "Server=.;Database=Food;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -force


更新某个表:后面加-tables 表名

 Scaffold-DbContext "Server=.;Database=Food;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -tables Article

但是更新某个表有坑啊,如果覆盖了,那个表不会生成导航属性,而且那个山下文对象也只有那个表的内容了....暂时没有找到更好的办法...

单独更新拷贝过来,或者全部更新,或者直接写手吧,比如添加了一个字段什么的


     

 添加成功后在models可以看到, 生成了上下文对象与和表对应的model


官方文档

https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/cli/powershell



然后就可以开始使用EF了

  1.  public IActionResult Index()
  2.         {
  3.  
  4.             FoodContext fc = new FoodContext();
  5.  
  6.             List<ProType> ptlist = fc.ProType.ToList();
  7.  
  8.             ViewBag.ptlist = ptlist;
  9.  
  10.             return View();
  11.         }



五.使用依赖注入来装载EF的上下文对象


 .net core中用了不少的依赖注入,官方文档中也推荐使用


1:删除方法     

  1.  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  2.         {
  3.             //#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
  4.             optionsBuilder.UseSqlServer(@"Server=.;Database=Food;Trusted_Connection=True;");
  5.         }


2:添加方法 

  1.      public FoodContext(DbContextOptions<FoodContext> options)
  2.             : base(options)
  3.         {
  4.  
  5.         }

添加的是一个构造函数用于构造函数注入(这个方法在新版的时候会自动加入)



3:在startup.cs的ConfigureServices方法中添加依赖注入    

  1.   public void ConfigureServices(IServiceCollection services)
  2.         {
  3.             // Add framework services.
  4.             services.AddMvc();
  5.  
  6.             services.AddDbContext<FoodContext>(option => {
  7.                 option.UseSqlServer("Data Source =.; Initial Catalog = EFCore_dbfirst; User ID = sa; Password = sa.123");
  8.             });
  9.             
  10.         }

注:usersqlserver是一个扩展方法,需要添加ef core的引用using Microsoft.EntityFrameworkCore;       


  • 连接字符串写入配置文件

      http://www.tnblog.net/aojiancc2/article/details/1266  



4:使用的时候就不能直接去实例化了否则会报错找不到上下文对象

应该使用注入的方式去获取ef对象,例如构造函数注入

  1.   private CNBlog_ServerContext ef;
  2.         public ArticleDAL(CNBlog_ServerContext context) //通过依赖注入得到实例
  3.         {
  4.             ef = context;
  5.         }




 微软官方文档:

 https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db 


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

.net core 使用 Kestrel

Kestrel介绍 Kestrel是一个基于libuv的跨平台web服务器 在.net core项目中就可以不一定要发布在iis下面了Kestrel体验可以使...

net core使用cookie

net core中可以使用传统的cookie也可以使用加密的cookieNET CORE中使用传统cookie设置:HttpContext.Response.Cookies.Appe...

net core项目结构简单分析

一:wwwrootwwwroot用于存放网站的静态资源,例如css,js,图片与相关的前端插件等lib主要是第三方的插件,例如微软默认引用...

.net core使用requestresponse下载文件下载excel等

使用request获取内容net core中request没有直接的索引方法,需要点里边的Query,或者formstringbase64=Request.Form[&quot;f...

iframe自适应高度与配合net core使用

去掉iframe边框frameborder=&quot;0&quot;去掉滚动条scrolling=&quot;no&quot;iframe 自适应高度如果内容是固定的,那么就...

net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified

这是因为net core2.1默认使用的https,如果使用Kestrel web服务器的话没有安装证书就会报这个错其实仔细看他的错误提示,其...

net core使用url编码与解码操作

net core中暂时还没有以前asp.net与mvc中的server对象。获取url的编码与解码操作不能使用以前的server对象来获取。使用的是...

下载net core

官方下载地址:https://dotnet.microsoft.com/download 进来之后就可以看到最新的下载版本可以直接点击下载,也可以下载其...

net core使用依赖注入来装载EF的上下文对象

妹子情人节快乐~.net core中用了不少的依赖注入,官方文档中也推荐使用。这样使用依赖注入来管理ef对象,还是比较科学,比如...