当您输入dotnet new时,这些相同的模板也可以在命令行的开箱即用:

Razor支持C#7.1
Razor引擎已经更新,可以使用新的Roslyn编译器,其中包括支持C#7.1功能,如默认表达式,推断元组名称和与泛型的模式匹配。
简化应用主机配置
主机配置已经大大简化,一个新的WebHost.CreateDefaultBuilder包含在默认的ASP.NET Core模板中,自动分配一个Kestrel服务器,该服务器将尝试在IIS上运行,并配置标准控制台日志记录提供程序。您的Program.cs文件只能简化为此内容:
这减少了意外破坏大多数开发人员在其ASP.NET Core应用程序中未更改的一些标准配置的可能性。为什么你可以一遍又一遍地编写相同的样板代码,当它可以简化为3行代码?
四、EntityFramework Core 2.0 简介实体框架(EF)Core是实体框架的轻量级,可扩展和跨平台版本,它是.NET的流行的对象/关系映射(O / RM)框架。
dotnet add package Microsoft.EntityFrameworkCore.SqlServer -V 2.0.0
这个版本的新功能是什么
以下是EF Core 2.0中最突出的一些新功能:
.NET标准2.0
EF Core现在针对新的.NET Standard 2.0。后者定义了超过32,000个API的共享表面区域,它们跨.NET Framework,.NET Core,Mono,Xamarin以及即将推出的通用Windows平台。使用.NET Standard 2.0,开发人员可以在各种平台,应用程序类型和设备上重用其代码和技能。
有关在每个平台上使用EF Core 2.0的详细指导,请参阅我们的平台支持文档。
改进LINQ翻译
在多种情况下,查询在EF Core 2.0中更有效率。例如,我们增加了可以转换为SQL的模式数量,因此许多在以前版本中触发客户端评估的查询将不再在2.0中执行。
像查询运算符
您现在可以EF.Functions.Like()在LINQ查询中使用,如果需要,它将被转换为LIKE或在内存中进行评估。例如,以下查询:
var customers =from c in context.Customerswhere EF.Functions.Like(c.Name, "a%");select c;
被翻译如下:
SELECT [c].[Id], [c].[Name]
FROM [Customers] AS [c]
WHERE [c].[Name] LIKE N'a%';
拥有的实体和表拆分
您现在可以定义“所有”或“子”实体,这些实体将其他实体中的属性进行分组,与在EF6中使用的复杂类型非常相似,但具有包含参考导航属性的功能。结合表分割,拥有的类型允许这两个实体自动映射到单个Customer表:
public class Customer
{public int Id { get; set; }public string Name {get; set;}public PhysicalAddress Address { get; set; }
}
public class PhysicalAddress
{public string StreetAddress { get; set; }public Location Location { get; set; }
}
...
modelBuilder.Entity<Customer>().OwnsOne(c => c.Address);
全局查询过滤器
您现在可以在模型中指定自动应用于所有执行的查询中所有类型的实体的过滤器DbContext。例如OnModelCreating:
modelBuilder.Entity<Post>().HasQueryFilter(p => !p.IsDeleted);
此查询将仅返回未标记为已删除的帖子:
var blog = context.Blogs.Include(b => b.Posts).FirstOrDefault(b => b.Id == id);
DbContext合并
许多ASP.NET Core应用程序现在可以通过将其DbContext类型的服务注册配置为使用预先创建的实例池来获得性能提升,从而避免为每个请求创建新实例的成本:
services.AddDbContextPool<BloggingContext>(options => options.UseSqlServer(connectionString));
原始SQL方法中的字符串插值
使用C#字符串插入语法的以下SQL查询现在可以正确参数化:
var city = "Redmond";
using (var context = CreateContext())
{context.Customers.FromSql($@"SELECT *FROM CustomersWHERE City = {city}");
}
这将创建一个@p0
值为'Redmond'
SQL 的参数,如下所示:
SELECT *
FROM Customers
WHERE City = @p0
和更多
我们已经添加了一些更多的功能,如显式编译的查询,自包含的实体配置在代码优先和数据库标量函数映射(感谢Paul Middleton做出了巨大的贡献!),我们修复了很多错误。
请查看我们的文档中的新功能的概述。
.Net Core 2.0正式版上线