如何用EF Core连接数据库并且生成实体类?

1、通过Nuget安装依赖

Install-package Microsoft.EntityFrameworkCore
Install-package Microsoft.EntityFrameworkCore.Tools
Install-package Microsoft.EntityFrameworkCore.Design
Install-package Microsoft.EntityFrameworkCore.SqlServer
Install-package Microsoft.EntityFrameworkCore.SqlServer.Design

2、Scaffold-DbContext命令连接数据库

Scaffold-DbContext -Connection "Server=.;Database=EFCoreDemo;uid=sa;pwd=123" Microsoft.EntityFrameworkCore.SqlServer -OutputDir "Models"

关于此命令的一些解释,可以参见:

开源中国: Scaffold-DbContext

MSDN: Scaffold-DbContext

要注意的是,如果数据库更新了,想将项目里面映射的model更新,那么可以在上述命令加上"-Force"参数

这两个步骤之后,就可以像EntityFramword一样操作数据库表了。

Models.TestDBContext dbContext = new Models.TestDBContext();

        [HttpGet]
public JsonResult GetVoteDetail(int voteID)
{
var vote = (from v in dbContext.Vote
join s in dbContext.Staff on v.Creator equals s.Id
where v.Id == voteID
select new { s.NameEnglish, v.Title }).FirstOrDefault(); string ss = vote.NameEnglish;
return null;
}

那么,怎么用EF Core操作数据库里面的视图呢?

EF Core2.2 DBFirst映射出来的实体类只包含了Table,并没有View之类。

三个步骤:

1、仿照DB的视图,手动创建一个实体类

2、修改Scaffold-DbContext命令生成的DbContext文件,增加视图的属性

3、修改DBContext文件的OnModelCreating方法,添加视图相关内容

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasAnnotation("ProductVersion", "2.2.3-servicing-35854"); modelBuilder.Entity<City>(entity =>
{
entity.Property(e => e.Id).HasColumnName("ID"); entity.Property(e => e.Address).HasMaxLength(); entity.Property(e => e.AddressChinese).HasMaxLength(); entity.Property(e => e.Name)
.IsRequired()
.HasMaxLength(); entity.Property(e => e.NameChinese).HasMaxLength(); entity.Property(e => e.Phone).HasMaxLength();
}); 。。。。。。。。。。。 //上面都是自动生成的,下面的是要添加的部分代码 //EF core for DB view
modelBuilder.Query<VoteItemView>(v =>
{
v.ToView("VoteItemView");
v.Property(p => p.ID).HasColumnName("ID");
});
}

然后,就可以在代码里面获取到数据库的视图了:

            var voteItems = from i in dbContext.VoteItemView
where i.VoteID == voteID
select i;

当然,这样做的话,如果再次调用Scaffold-DbContext命令并且带了-Force参数,我们更改过的DBContext文件的内容就丢失了。所以,我们还可以构造一个自定义的DbContext类TestDbExContext,其继承于Scaffold-DbContext指令自动生成的DbContext类。

可以参见:EF Core 2.0中如何手动映射数据库的视图为实体

怎么在EF Core使用SQL命令呢?

通过Linq、拉姆达表达式,dbContext的Add、SaveChanges等方法可以比较方便地操作数据库。但是有时候仍然想直接执行SQL命令。这就需要用到dbContext.Database.ExecuteSqlCommand命令了。要用到此命令,需要先引用Microsoft.EntityFrameworkCore。否则dbContext.Database就只会包含BeginTransation、CanConnect、CommitTransaction、RollbackTransaction等几个方法或属性,而死活找不到ExecuteSqlCommand。

using Microsoft.EntityFrameworkCore;

EntityFramewordCore 2.2 DBFirst简单使用的更多相关文章

  1. 个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 2

    接上篇:个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 1 Step1 在主程序中设置连接数据库 从Model类库的 App.Config 把数据库字符串拷贝出来, ...

  2. EFCore2.1中DbFirst和CodeFirst简单使用

    EFCore中没有DbFirst了吧,应该都是Code First 先说说第一种,Code First From Database(DbFirst)数据库先行,这种方式就要命令行了...(特不喜欢命令 ...

  3. 2_MVC+EF+Autofac(dbfirst)轻型项目框架_用户权限验证

    前言 接上面两篇 0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架 与 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例) .在第一篇中介 ...

  4. 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例)

    前言 在上一篇0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架中,我已经介绍了这个轻型框架的层次结构,在下面的这篇文章中,我将以教师登陆功能为例,具体来扩充下我的core层的代 ...

  5. 0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架

    前言 原来一直使用他人的开源项目框架,异常的定位会很麻烦,甚至不知道这个异常来自我的代码还是这个框架本身.他人的框架有一定的制约性,也有可能是我对那些框架并没深入了解,因为这些开源框架在网上也很难找到 ...

  6. 简单的后台数据和前台数据交互.net

    最近忙着做POS项目,心血来来潮写了点小项目. 更具要求是随机显示数据并且产生的数据是可以控制的.前台交互显示能够倒叙,切每次只显示一条,页面不能超过20条超过的部分做删除. 我先展示一下前台的代码, ...

  7. 深入浅出EF之ModelFirst和DBFirst

    在上篇博文中,小编主要简单的介绍了一下EF的一些基础知识,其中,小编蜻蜓点水的提了一下ModelFirst和DBFirst,ModelFirst先设计实体,然后根据模型生成数据库,DBFirst根据数 ...

  8. .NET框架 - NETFramework + API + EF(DBFirst) + MYSQL

    .NET框架 - NETFramework + MVC+ EF(DBFirst) + MYSQL 1. 安装3个MYSQL插件 ①mysql-for-visualstudio-1.2.8    vs的 ...

  9. EF CodeFirst系列(1)---CodeFirst简单入门

    1.什么是CodeFirst 从EF4.1开始,EF可以支持CodeFirst开发模式,这种开发模式特别适用于领域驱动设计(Domain Driven Design,大名鼎鼎的DDD).在CodeFi ...

随机推荐

  1. [POJ 1386] Play on Words

    [题目链接] http://poj.org/problem?id=1386 [算法] 将每个单词的首字母向尾字母连一条有向边,判断欧拉路径是否存在,即可 [代码] #include <algor ...

  2. JSP-Runood:JSP 客户端请求

    ylbtech-JSP-Runood:JSP 客户端请求 1.返回顶部 1. JSP 客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息 ...

  3. word文档在线预览解决方案

    花了一整天在网上翻关于 “word文档在线预览解决方案” 相关的资料,感觉实现难度比较大还是用PDF来解决好了.. 下面列一下比较好的参考资料吧 参考资料 前端实现在线预览pdf.word.xls.p ...

  4. PCB WebAPI跨域访问 实现方式

    我们写WebAPI不仅自己系统调用,也需要给其它系统调用,那么如何实现跨域访问了,在这里介绍2种方法实现 方法一.修改Web.Config文件   实现 此方法是全局实现跨域,如果仅想某个方法实现跨域 ...

  5. Complicated Expressions(表达式转换)

    http://poj.org/problem?id=1400 题意:给出一个表达式可能含有多余的括号,去掉多余的括号,输出它的最简形式. 思路:先将表达式转化成后缀式,因为后缀式不含括号,然后再转化成 ...

  6. 绝对牛x的代码注释

    备注:文中字符均可以直接复制直接用! 再补上一个好玩的网站 Ascii World:(链接:http://www.asciiworld.com/). 网站上的图形很多,感兴趣的可以复制链接到浏览器上打 ...

  7. IE版本的判断

    var Sys = {};var ua = navigator.userAgent.toLowerCase(); var s;(s = ua.match(/msie ([\d.]+)/)) ? Sys ...

  8. jmeter中beanshell断言的使用

    简单使用beanshell的内容,进行测试内容的判断 这里通过断言内容,修改if的条件,达到发送警报邮件的功能 beanshell 代码如下:     SampleResult 等效于 prev lo ...

  9. ACM_小凯的排序(字符串)

    小凯的排序 Time Limit: 2000/1000ms (Java/Others) Problem Description: 调皮的小凯喜欢排序,拿到什么东西都要排一下序.现在他觉得单一的递增递减 ...

  10. 使用HBuilder新建项目

    依次点击文件→新建→选择Web项目(按下Ctrl+N,W可以触发快速新建(MacOS请使用Command+N,然后左键点击Web项目)) 如上图,请在A处填写新建项目的名称,B处填写(或选择)项目保存 ...