神马玩意,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的内容。我们下节再会。

时间: 2024-07-31 02:22:48

神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观的相关文章

小白玩家PK骨灰粉丝暴雪嘉年华是神马玩意?

(编译/Drdarknight)又到了一年一度的暴雪游戏展(BlizzCon)了,这个世界上由单个公司所举办的最大游戏展会将于10月22日在加州南部的阿纳海姆会展中心正式开展.虽然大部分的玩家对于这个展会都甚为了解,不过也不排除有些宅属性过高的玩家依然对它一无所知.以下便是一位小白玩家和海外游戏网站编辑之间有关这个展会的 对话,对暴雪嘉年华一知半解的筒子们可以趁机扫扫盲. 小白玩家:暴雪是谁? 骨灰粉丝:你搞笑?好吧,暴雪是个历史悠久的公司,它最富盛名的作品有<暗黑破坏神>,<星际争霸&

神马都是浮云 要平淡看待PR更新

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 当所有人都肯定的认为Google PageRank(简称PR值,谷歌对网站或网页质量的一项评级参数)不再更新时,昨晚竟然大幅更新了,这次PR更新距离2010年4月已经有8.9个月之久,按照之前PR更新的频率每三个月一次调整,之前PR迟迟不更新,谷歌官方有传出消息称谷歌将取消PR值,今后停止PR更新,而这次的突然大更新打乱了很多站长或Seoer

神马SEO讲述:网站优化推广的三要素

搞网站有好几年的经历了.从接单到建站,从建站到推广,涉及到的行业也数不胜数,从中也经历过许多磨难,比如建站被客户的刁难,优化客户的站没有效果,网站被k等,但是也有快乐的时候,比如关键词优化上去,收到了客户的钱,老板的鼓励,加工资等.总的来说站长确实不容易,个人觉得做seo是一件比较有意思的事,比起建站来说多了点新鲜的玩意,但是一定要把握好网站的优化细节,从优化网的经历来看,站长一定要计划好网站的每个过程,下面来说说自己心目中的网站优化推广三要素. 一.网站的定位 自己比较适合做什么类型的网站,千

神马搜索浅谈:突破旧荆棘和发展新道路

UC在近日推出的神马搜索引擎,可谓是将自己推上了风口浪尖,更是将百度这个互联网巨头牵扯进来,对于神马的发展,在近一段时间可能不那么容易,而即使与阿里巴巴这样的电商合作,神马未来的发展依然是一个未知数. 神马在移动搜索中会遇到各种各样的阻力,纵观国内的情况,神马的诞生非常有可能对于传统产业产生冲击,而神马的开发商UC更是拥有大量的活性用户,而这正是百度所害怕的,在移动领域,百度的应用做的并不是很好,所以为了争夺移动搜索这块巨大的蛋糕,神马需要做很多,而百度也会死咬着牙不停的打压神马的发展,而随着互

用户研究小技巧:用户测试的目的究竟是神马?

文章描述:发现用户言行不一的小技巧之感性篇. 早在19世纪30年代,美国心理学家 Richard LaPiere 就意识到一个人的态度与行为并不总是很牢固地联系在一起.LaPiere 得出这样的结论:如果你想预测一个人在面对某一真实的特定情景或特定人物时将如何表现的话,对假设性情景的口头回答(即用户的态度)是远远不够的. 事实的确如此,人类总有一种惯性,即使有最好的意图,也是说一套做一套.用户也不外乎凡人的本性,那么,我们如何快速的发现用户在进行测试时是真心还是假意呢,下面就是我作为一名小实习生

神马“百度权重值”都是浮云

曾几何时,seo业界出现了百度权重这个名词,也越来越多的站长迷恋这个值,越来越多的站长甚至把他奉为交换友情链接的重要一句之一.我要说,神马"百度权重值"都是浮云! 什么是百度权重值 百度从没有像谷歌一样承认自己有权重这么一回事,BR只是爱站,站长工具等网站推出的一个按照网站关键词的排名和指数,估计会给你网站带来多少流量的指数罢了,毫无搜索引擎官方的认可. 目前作为seo工具,站长经常用到的就是站长工具与爱站网,在这里我用实战告诉大家,百度权重值确实是浮云,没有统一性!     以上分别

神马导航使用技巧

神马导航是一款免费.绿色小巧的内容导航软件,首创桌面图标化导航,自由搭配海量内容,便捷的一键搜索,开启用户简单高效的桌面化上网生活.神马导航具有时尚的界面.精美的图标为用户提供个性化桌面方案切换;平板电脑式操作风格,形象生动的界面展现,简单方便的内容导航,所有的操作设置都在桌面进行和完成,简单易懂,得心应手;让用户工作更高效,娱乐更便捷;使用神马导航既使你是一个上网新手也能快速熟练的上网冲浪. 神马导航的安装过程还是非常的简单,用户只要根据安装向导进行操作即可轻松完成安装,整个安装过程没有任何复

神马搜索跳到搜狗搜索怎么回事

  5月6日消息,来自河北陕西神马搜索等地的用户反馈,输入关键词后,输出的却是跳到了搜狗搜索的结果. 有网络互联网专家在新浪微博中指出,神马搜索估计是遭遇了通过电信运营商的流量劫持,幕后主使可能是搜狗,另有一种可能性是搜狗搜索的推广代理商. 还有一种情况可能是因为搜狗输入法问题,卸载了搜狗输入法之后就不会再跳转出现搜狗搜索内容. 也有业内人士指出,神马被劫持更大的可能性是搜索的推广代理商主导的.搜索引擎都有推广代理商,其中一些不良代理商为了获得更多的分成,就会用类似运营商网关劫持的灰色手段抢夺其

驱动人生随身wifi,神马路由器都弱爆了!

这是一个什么都讲究速度.便捷的年代,用宽带也希望速度越来越快,使用方式越来越便捷,但出门在外偶尔就不太舒心,特别是在酒店,有些比较落后的地方没有 wifi,这时候该怎么办呢?驱动人生教你把笔记本无线网卡"化身"热点,轻轻松松一键连wifi,神马路由器.迷你路由等等硬件可以忽略了. Wif共享 打开驱动人生软件,在主界面上能够看到右上角的"Wif共享"功能图标,点击按钮打开功能设置,下面跟着小编一起来玩转驱动人生的wifi功能吧! Wif共享 打开wifi功能设置主界