Entity Framework 8(EF8)是用于 .NET 开发人员的流行对象关系映射 (ORM) 框架的最新版本。它于 2023 年 11 月发布,包含许多新功能和改进。
EF8 的主要新功能包括:
对 JSON 列的支持:EF8 现在支持将 JSON 数据存储在数据库中的 JSON 列中。这对于存储非关系数据或具有复杂结构的数据非常有用。 值对象:EF8 现在支持值对象。值对象是不可变的类型,它们的值是其身份的一部分。这对于使用领域驱动设计 (DDD) 的应用程序非常有用。 未映射类型的 SQL 查询:EF8 现在允许您执行返回未映射到模型类型的 SQL 查询。这对于需要访问数据库中不表示为实体的数据非常有用。 改进的性能:EF8 在许多方面都进行了性能改进。这包括改进的查询性能、改进的跟踪性能和改进的更改跟踪性能。其他新功能和改进包括:
对 .NET MAUI 的支持:EF8 现在支持 .NET MAUI,这是一种用于构建跨平台应用程序的框架。 改进的 SQLite 支持:EF8 对 SQLite 的支持进行了改进,包括对 JSON 列的支持和改进的性能。 改进的代码生成:EF8 的代码生成器进行了改进,以生成更简洁、更易读的代码。有关 EF8 中所有新功能和改进的详细信息,请参阅 EF8 文档: URL EF8 文档。
以下是一些 EF8 新功能的示例:
使用 JSON 列
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
[Column(TypeName = "json")]
public Address Address { get; set; }
}
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
}
在上面的代码中,Person 类有一个 Address 属性,该属性存储为 JSON 列。
使用值对象
public class Money
{
private readonly decimal _amount;
public Money(decimal amount)
{
_amount = amount;
}
public decimal Amount => _amount;
public static implicit operator Money(decimal amount) => new Money(amount);
public static implicit operator decimal(Money money) => money._amount;
}
在上面的代码中,Money 类是一个值对象。它表示货币值。
执行未映射类型的 SQL 查询
var context = new MyContext();
var results = context.SqlQuery<dynamic>(
@"SELECT * FROM dbo.Products
WHERE Price > @price",
new SqlParameter("@price", 100));
foreach (var result in results)
{
Console.WriteLine($"{result.Name} - {result.Price}");
}
在上面的代码中,SqlQuery 方法用于执行返回未映射到模型类型的 SQL 查询。
2