Net Core2.0 升级到.Net Core 2.1

时间:2023-03-08 20:54:22
Net Core2.0 升级到.Net Core 2.1

1. 安装新 .Net Core SDK 2.1

2. 升级VS.net 到15.7, 这个版本极其不好用,IIS打中文会自动退出,但现在也没办法降级了.只能等微软打补丁.

3. 对于面向 ASP.NET Core 2.1 及更高版本的应用程序,建议使用 Microsoft.AspNetCore.App 而不是Microsoft.AspNetCore.All

https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/metapackage?view=aspnetcore-2.1

4. 多了warning和sql injection detection

@Html.PartialAsync("_Header")

5. NLog.config, 重新设置一下 copy to bin :always

升级到.Net Core 2.1, 我在Mac上的Mysql连接不了,因为现在只支持.Net Core 2.0, 没办法只能降回2.0,   现在已经支持2.1了. 而且2.1是长期支持的版本. 还是要升级上去的.

但是project文件改tareget framework没有用,我只能找回几天前的project文件替换.

6. EF Core 2.1 支持 Lazy Loading, Model里定义为虚 virtual属性的字段,可以延迟加载

Install-Package Microsoft.EntityFrameworkCore.Proxies -Version 2.1.

Startup.cs的configureSerice里增加

services.AddDbContext<SchoolContext>(options =>
options.UseLazyLoadingProxies().UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); //如果未在Context中添加UseLazyLoadingProxies,导航属性不会添加

在实体框架Entity Framework 6及之前的版本中,数据模型的导航属性只要加上virtual关键字,在你访问这个属性的时候(不管是对象还是对象集合),EF的内部机制就会自动加载相关数据。

这一特性就称之为Lazy Loading,其为开发带来极大方便(尤其需要快速开发的时候),因为不用操心去查询关联数据。当然缺点也很明显,就是这种查询方式其实是低效的,且在某些情况下使用不当也会造成性能问题。

当然除了使用Lazy Loading外,你还可以使用Include来预先加载关联数据(执行一次查询返回多个数据结果),此特性称之为Eagerly Loading

在EF6.x和EF Core 中,Include的使用基本一致,不过在加载多级数据的时候就有所不同了。EF6.x的方式比较简单直接,详细见:https://msdn.microsoft.com/zh-cn/data/jj574232#eagerLevels

在EF Core 中就需要用到新的ThenInclude方法。详细用法见下面的示例代码:

var get = await db2.Sites
.Include(o => o.ArticleColumns).ThenInclude(o => o.Categories)
.SingleOrDefaultAsync(o => o.Id == site.Id);

参考: http://www.cnblogs.com/dudu/p/9009295.html