EntityFramewordCore 2.2 DBFirst简单使用
如何用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"
关于此命令的一些解释,可以参见:
要注意的是,如果数据库更新了,想将项目里面映射的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;
最新文章
- Tomcat 知识点
- 技术之余。。。电吉他自弹 魂斗罗 solo
- Jquery获取checkbox属性checked为undefined
- 【SPOJ 8222】Substrings
- ACPI I/O resource conflict with SMBus
- 理解OAuth 2.0 -摘自网络
- CodeForces 710E Generate a String (DP)
- 去除重复命令uniq
- List<;T>;类
- MFC自绘控件学习总结第二贴---转
- matlab显示原图和灰度直方图
- CentOS 6.X x64 编译安装 Countly
- python+request接口自动化框架
- 安卓高级2 swipeReferenceLayout 使用案例 和完善其自定义上拉
- 【spring源码分析】IOC容器初始化(十一)
- C# 01 Primitive Types and Expressions
- Bootstrap-datepicker3官方文档中文翻译---概述(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)
- C# json解析
- DNS污染
- event.stopPropagation与event.preventDefault的区别