星空网 > 软件开发 > ASP.net

Entity Framework7 有哪些不同?之具体功能

Entity Framework7 有哪些不同?之具体功能

 

  前面我们介绍了关于EF7的新特性、开发计划和入门介绍。今天,我们来看看EF7的具体新功能及用法。本文中的环境,为EF7入门里介绍的环境。

  1、在Linq to Entity 查询中对列使用类型转换,请见如下代码:

1 var result = db.Blogs.Where((b => Convert.ToInt32(b.IntString) == 2)).FirstOrDefault();

  代码中的Convert.ToInt32(b.IntString),对列IntString转换成Int32类型。生成SQL语句如下:

1 SELECT TOP(1) [b].[BlogId], [b].[IntString], [b].[Url]2 FROM [Blog] AS [b]3 WHERE (CONVERT(int, [b].[IntString]) = 2)

  备注,可能不少朋友想在Linq To Entity中使用 Tostring()方法,这在EF6.1中就支持了,平常还听到不少朋友在感叹,要是EF7支持枚举就好了,其实,这个功能也是在EF6.1中就支持了。

 

  2、Code-First下用数据迁移更新数据库时使用修改(Alter)代替删除(Dropping)后重新创建

    在这之前,相信不少人吃过亏,因为之前模型发生变更,使用数据迁移更新数据库结构时,是先删除数据库,再重新创建,这样的问题是,会造成数据丢失。听说有人因为不熟悉这功能,把生产环境的数据也给弄丢失了。

 

  3、删除孤儿(orphans)记录

  这个,让我们直接举例来说明。假设我们有一个对多关系的模型,Blog和Post,在Blog实体中有导航属性Posts。在数据库中Post通过外键BlogId与Blog关联,且BlogId不能为空。如果我们在Blog实体中,使用如下方法 Posts.Remove(post); 然后调用上下文对象中的SaveChages()保存修改。按理是应该把post对象的记录给删除掉,但实际的情况是,我得到了一个异常。原因是现在EF版本是这样处理的:它把从Blogs导航属性集体中移除的post对象的BlogId设置为null,然而数据库中对应的外键又不能为null,于是保存失败。这个post也被形象的叫做孤儿(与父对象脱离了关系)对象。 EF7将会解决这一问题。代码如下:

1          var result = db.Blogs.Where((b => Convert.ToInt32(b.IntString) == 2)).FirstOrDefault();2 3         if (result != null)4         {5           var post = db.Posts.FirstOrDefault(p => p.PostId == 1);6           result.Posts.Remove(post);7           db.SaveChanges();8         }

下图是EF6下的异常

Entity Framework7 有哪些不同?之具体功能

很遗憾的是,现在EF7的最新预发行版本EF7.0.0-beta7还没有解决这个问题,但异常的内容发生了改变.

Entity Framework7 有哪些不同?之具体功能

相信在后面版本会得到处理,因为EF团队已经承诺要解决这个问题。

 

  4、日志记录

    在日志中查看EF生成的SQL,相信这种方法帮助过不少的人(当然不是全部,因为有人还不知道有这东西,做开发就得不停的学习!)。EF6中,大家是使用类似如下的代码来记录SQL语句:

1 db.Database.Log = s => Console.WriteLine(s);

    EF7中,为了使用Microsoft.Framework.Logging日志框架和依赖注入,关于日志的接口是几经变化。首先是去掉了上面的的Database.Log,在EF7.0.0-beta2中使用如下的方式:

1        db.Configuration.LoggerFactory.AddProvider(new DiagnosticsLoggerProvider(2         new SourceSwitch("SourceSwitch", "Verbose"),3         new ConsoleTraceListener()));  

    后来,微软就去掉了db.Configuration,使用如下的方式:

1         IServiceProvider contextServices = ((IDbContextServices)db).ScopedServiceProvider;2         var loggerFactory = contextServices.GetRequiredService<ILoggerFactory>();3         oggerFactory.AddConsole(LogLevel.Verbose);

    现在的版本中,又变成如下方式:

1        var service = ((IAccessor<IServiceProvider>)db).Service;2         var loggerFactory = service.GetRequiredService<ILoggerFactory>();3         loggerFactory.AddConsole(LogLevel.Verbose);

    也许,后面的Beta8,RC版本还会有调整,但可以确认的是,它会越来越强。从日志接口的变化也可以看,EF7目录处于开发过程中,变化会很大。因此,文中介绍的功能,都是以目前已有的版本为基础,后面可能会变生变化,这一点要请大家注意。

 

 

  今天就先到这里,有点不舒服。改天再慢慢写。谢谢你的理解。

 

 

实体框架交流QQ群:  458326058,欢迎有兴趣的朋友加入一起交流

谢谢大家的持续关注,我的博客地址:http://www.cnblogs.com/VolcanoCloud/

  

 




原标题:Entity Framework7 有哪些不同?之具体功能

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

亚马逊什么品类在旺季容易爆单:https://www.kjdsnews.com/a/1729936.html
Shopify平台使用最常用的支付方式有哪些?:https://www.kjdsnews.com/a/1729937.html
2023外贸前10强排名出来了!有黑马杀入!:https://www.kjdsnews.com/a/1729938.html
MSK航线调整!涉及印度和中东!:https://www.kjdsnews.com/a/1729939.html
突发!全国大罢工!所有港口瘫痪,客户付款“老大难”,市场凉透了...:https://www.kjdsnews.com/a/1729940.html
断货预警!亚马逊卖家要做好备货准备?:https://www.kjdsnews.com/a/1729941.html
三亚有哪些酒店值得入住?:https://www.vstour.cn/a/366173.html
零售晚报:丽人丽妆2023年扭亏为盈 玉容初、美壹堂等自有品牌增速超40% :https://www.kjdsnews.com/a/1836649.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流