如何用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;

最新文章

  1. Tomcat 知识点
  2. 技术之余。。。电吉他自弹 魂斗罗 solo
  3. Jquery获取checkbox属性checked为undefined
  4. 【SPOJ 8222】Substrings
  5. ACPI I/O resource conflict with SMBus
  6. 理解OAuth 2.0 -摘自网络
  7. CodeForces 710E Generate a String (DP)
  8. 去除重复命令uniq
  9. List&lt;T&gt;类
  10. MFC自绘控件学习总结第二贴---转
  11. matlab显示原图和灰度直方图
  12. CentOS 6.X x64 编译安装 Countly
  13. python+request接口自动化框架
  14. 安卓高级2 swipeReferenceLayout 使用案例 和完善其自定义上拉
  15. 【spring源码分析】IOC容器初始化(十一)
  16. C# 01 Primitive Types and Expressions
  17. Bootstrap-datepicker3官方文档中文翻译---概述(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)
  18. C# json解析
  19. DNS污染
  20. event.stopPropagation与event.preventDefault的区别

热门文章

  1. IDEA Spark Streaming 操作(RDD队列流)
  2. 当Table中td内容为空时,让它显示边框的办法
  3. 直接使用FileSystem以标准输出格式显示hadoop文件系统中的文件
  4. bzoj4247: 挂饰(背包dp)
  5. max_allowed_packet设置问题
  6. 记录第一次在egret项目中使用Puremvc
  7. ACM_寻找第N小序列
  8. Android中有四大组件的简单总结
  9. Android内存管理(8)Dalvik,ART和 .dex 是什么*
  10. Win32双缓冲讲解