如何用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. Spark中统计程序运行时间

    import java.text.SimpleDateFormat import java.util.Date val s=NowDate() //显示当前的具体时间 val now=new Date ...

  2. cloudstack ---部署的架构

    cloudstack跟KVM一起部署的架构 下图是CloudStack跟kvm一起部署的架构: 在每个kvm的宿主机上都需要部署agent程序. cloudstack跟vsphere一起部署的架构 下 ...

  3. P2924 [USACO08DEC]大栅栏Largest Fence

    传送门 反正我是看不出来这题和凸包有什么关系--大佬们是怎么想到的-- 不准确一点的说,本题就是要我们求一个边上点数最多的凸包 我们可以先把所有的边都取出来,然后按极角排序.枚举这个凸包的起点,然后做 ...

  4. null, undefined,"",0,false是什么关系?

    null本质上和0,"",false是一类东西,它们都表示一种数据类型的非值.正如0表示数字类型的非值,""表示字符类型的非值一样,null表示完全空的对象,即 ...

  5. 音频处理中的尺度--Bark尺度与Mel尺度

    由于人耳对声音的感知(如:频率.音调)是非线性的,为了对声音的感知进行度量,产生了一系列的尺度(如:十二平均律),这里重点说下Bark尺度与Mel尺度.刚开始的时候,我自己也没弄明白这两个尺度的区别. ...

  6. Java 删除List元素的正确方式

    方式一:使用Iterator的remove()方法 public class Test { public static void main(String[] args) { List<Strin ...

  7. 判断IOS静态库(.a文件)是否支持模拟器和真机运行

    判断IOS静态库(.a文件)是否支持模拟器和真机运行 在mac终端下,进入到.a文件目录下,然后输入: lipo -info libMyAlertView.a Architectures in the ...

  8. windows怎么进如debug调试

    主要说一下64位Win7使用debug程序的方法 首先你要下载一个DOSBOX程序 这个程序是一个dos模拟器 这个程序的制作目的是运行经典的DOS游戏 -.- 下载地址:http://www.dos ...

  9. Linux命令(005) -- kill、pkill和killall的比较

    kill命令用来“杀掉”指定进程PID的进程.终止一个前台进程可以使用Ctrl+C,终止一个后台进程就须用kill命令.kill命令是通过向进程发送指定的信号来结束相应进程的.在默认情况下,kill命 ...

  10. 337 House Robber III 打家劫舍 III

    小偷又发现一个新的可行窃的地点. 这个地区只有一个入口,称为“根”. 除了根部之外,每栋房子有且只有一个父房子. 一番侦察之后,聪明的小偷意识到“这个地方的所有房屋形成了一棵二叉树”. 如果两个直接相 ...