雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

Entity Framework8(EF8)有哪些新特性

2024-06-16 33

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 查询。

更新于:3个月前
赞一波!2

文章评论

全部评论