神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观
前言
哦,不搞SQL了么,当然会继续,周末会继续更新,估计写完还得几十篇,但是我会坚持把SQL更新完毕,绝不会烂尾,后续很长一段时间没更新的话,不要想我,那说明我是学习新的技能去了,那就是学习英语,本来没有打算再探究目前.NET中跨平台的东西,毕竟才出来没多久,还是有很多坑,希望有人踩过再来学习会好很多,可惜项目中都是用的最新的东西,我不得不去探索,于是有关EntityFramework Core的坑就这么出来了,来,我们一起看看。
EntityFramework Core 1.1迁移
我们首先还是给出本文需要说到的两个类,博客类(Blog)和文章发表类(Post)。基于每个类都有主键Id,我们定义一个接口。如下:
public interface IEntityBase
{
int Id { get; set; }
}
public class Blog : IEntityBase
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Url { get; set; } public virtual ICollection<Post> Posts { get; set; }
}
public class Post : IEntityBase
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual string Content { get; set; } public virtual int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
在EF 6.x中我们可以直接通过继承EntityTypeConfigiration<T>来进行映射,但是在EF Core中则没有,但是还是在GitHub上找到了解决方案,EF团队给出的答案是后续有可能会实现,当前对于这个映射优先级比较低暂时还未实现。链接【https://github.com/aspnet/EntityFramework/issues/2805#issue-99973931】接着我们映射如下:
public class BlogMap : EntityMappingConfiguration<Blog>
{
public override void Map(EntityTypeBuilder<Blog> b)
{
b.ToTable("Blog");
b.HasKey(k => k.Id);
b.Property(p => p.Name);
b.Property(p => p.Url);
b.HasMany(p => p.Posts).WithOne(p => p.Blog).HasForeignKey(p => p.BlogId);
}
} public class PostMap : EntityMappingConfiguration<Post>
{
public override void Map(EntityTypeBuilder<Post> b)
{
b.ToTable("Post");
b.HasKey(k => k.Id);
b.Property(p => p.Title);
b.Property(p => p.Content);
}
}
EF上下文定义如下:
public class EFCoreContext : DbContext
{
public EFCoreContext(DbContextOptions options) : base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.AddEntityConfigurationsFromAssembly(GetType().GetTypeInfo().Assembly);
}
}
接着在服务中注入EF上下文
services.AddDbContext<EFCoreContext>(options =>
{
options.UseSqlServer(sqlStr);
});
搭建了一个基本项目,我们将EF这一层放在StudyEFCore.Data下,实体放在StudyEFCore.Model下。如下:
来接下来我们进行迁移看看。我们通过如下命令行来进行:
dotnet ef migrations add Initial
结果是这样的
居然找不到dotnet-ef这个命令,园中已有答案,迁移需要利用添加EF工具包来进行
Microsoft.EntityFrameworkCore.Tools
按照这个链接【http://www.cnblogs.com/nele/p/5831434.html】来进行安装EF工具包。大概是如下这样
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
},
"Pomelo.EntityFrameworkCore.MySql": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
}, "tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
},
结果然后当然是可行的,但是Microsoft.EntityFrameworkCore.Tools最新的包是1.0.0-preview4-final,我们将其更新再运行试试。
结果令我们大吃一惊,更新到最近版本居然和没添加一样,这是什么情况尼,原来在tools节点下从EF Core 1.1开始现在已经由如下包代替
Microsoft.EntityFrameworkCore.Tools.DotNet
也就说在tools节点下我们需要添加上述包而非之前的Microsoft.EntityFrameworkCore.Tools包
"tools": {
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4"
},
那么为什么要进行代替尼,EF团队的解释如下:
As the design of .NET CLI Tools has progressed it has become necessary for us to separate the dotnet ef tools into this separate package.
大意是随着.NET CLI工具设计的完善,现在有必要将donet ef工具单独放在一个包中。接下来我们将上述继续进行修改,将tools节点下替换,而依赖中包修改为最新的包即可【额外说一句上述依赖包中的Microsoft.EntityFremeworkCore.Tools我们也可以用Microsoft.EntityFrameworkCore.Design代替】。结果如下:
神马玩意,又出错了,看到错误说明我们才明白过来,当我们在应用程序目录下创建EF时,这个时候肯定是没问题的,如果我们将EF单独作为一个项目来使用,我们在应用程序只是将其作为引用此时它会找不到EF上下文,毕竟迁移它会去查找EF上下文并迁移。此时我们只需要在Startup.cs中在注入EF时明确告诉要执行的命令要将EF迁移文件生成到当前应用程序的程序集下即可,如下:
services.AddDbContext<EFCoreContext>(options =>
{
options.UseSqlServer(sqlStr, d => d.MigrationsAssembly("StudyEFCore"));
});
接下来我们再来看看情况是怎样的,如下:
接下来我们再来将模型更新到数据库并生成表。通过如下命令
dotnet ef database update
总结
好了到了这里关于EF Core 1.1迁移就告一段落,希望能给看到本文的你不会感觉到上手EF Core会很难,后续有时间会陆续更新EF Core的内容。我们下节再会。
神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观的更多相关文章
- EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)
前言 终于踏出第一步探索EF Core原理和本质,过程虽然比较漫长且枯燥乏味还得反复论证,其中滋味自知,EF Core的强大想必不用我再过多废话,有时候我们是否思考过背后到底做了些什么,到底怎么实现的 ...
- 你必须知道的EntityFramework 6.x和EntityFramework Core变更追踪状态
前言 只要有时间就会时不时去看最新EF Core的进展情况,同时也会去看下基础,把握好基础至关重要,本节我们对比看看如标题EF 6.x和EF Core的不同,希望对正在学习EF Core的同行能有所帮 ...
- Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor
Webservice WCF WebApi 注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...
- Cookies 初识 Dotnetspider EF 6.x、EF Core实现dynamic动态查询和EF Core注入多个上下文实例池你知道有什么问题? EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)
Cookies 1.创建HttpCookies Cookie=new HttpCookies("CookieName");2.添加内容Cookie.Values.Add(&qu ...
- EntityFramework Core一劳永逸动态加载模型,我们要知道些什么呢?
前言 这篇文章源于一位问我的童鞋:在EntityFramework Core中如何动态加载模型呢?在学习EntityFramwork时关于这个问题已有对应园友给出答案,故没有过多研究,虽然最后解决了这 ...
- EntityFramework Core Raw SQL
前言 本节我们来讲讲EF Core中的原始查询,目前在项目中对于简单的查询直接通过EF就可以解决,但是涉及到多表查询时为了一步到位就采用了原始查询的方式进行.下面我们一起来看看. EntityFram ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- EntityFramework 7 更名为EntityFramework Core(预发布状态)
前言 最近很少去学习和探索新的东西,尤其是之前一直比较关注的EF领域,本身不太懒,但是苦于环境比较影响自身的心情,所以迟迟没有下笔,但是不去学习感觉在精神层面缺少点什么,同时也有园友说EF又更新了,要 ...
随机推荐
- nginx配置反向代理或跳转出现400问题处理记录
午休完上班后,同事说测试站点访问接口出现400 Bad Request Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...
- FFmpeg学习6:视音频同步
在上一篇文章中,视频和音频是各自独立播放的,并不同步.本文主要描述了如何以音频的播放时长为基准,将视频同步到音频上以实现视音频的同步播放的.主要有以下几个方面的内容 视音频同步的简单介绍 DTS 和 ...
- .NetCore MVC中的路由(2)在路由中使用约束
p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 120%; orphans: 2; widows: 2 ...
- 异常处理汇总 ~ 修正果带着你的Net飞奔吧!
经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...
- CodeSimth - .Net Framework Data Provider 可能没有安装。解决方法
今天想使用CodeSimth生成一个sqlite数据库的模板.当添加添加数据库的时候发现: .Net Framework Data Provider 可能没有安装. 下面找到官方的文档说明: SQLi ...
- 让kindeditor显示高亮代码
kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: ...
- PhotoView实现图片随手势的放大缩小的效果
项目需求:在listView的条目中如果有图片,点击条目,实现图片的放大,并且图片可以根据手势来控制图片放大缩小的比例.类似于微信朋友圈中查看好友发布的照片所实现的效果. 思路是这样的:当点击条目的时 ...
- 一个IT人的成长路
毕业四年多了,来深圳三年多了,经历了刚毕业的懵懂少年,成长为现在的成熟稳重青年.职场上,从刚毕业的小白,成长为现在可以成熟应对各种事情的老司机.经历过从初级研发工程师,到中级研发工程师,到高级研发工程 ...
- gRPC源码分析1-SSL/TLS
引子 前几天看到微信后台团队分享了TLS相关文章,正好gRPC里TLS数据加密是很重要的一块,于是整理出了这篇文章. 在gRPC里,如果仅仅是用来做后端微服务,可以考虑不加密.本文太长,先给个大纲. ...
- maven的pom.xml关系依赖书写顺序
今天遇到了一个情况,以前代码编译没有问题,升级了hbase客户端phoenix驱动,又调整了thrift的关系依赖的位置,放到了这个驱动后面. 如下: 导致了一个thrift接口类编译报错: 检查这个 ...