ef core 子对象集合插入顺序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ef core 子对象集合插入顺序相关的知识,希望对你有一定的参考价值。

参考技术A 数据库的顺序是有严格定义的,分物理顺序、逻辑顺序!! 物理顺序默认根据插入时间排列,也可以通过特定sql语句控制。

EF Core:如何访问多层封装的集合

【中文标题】EF Core:如何访问多层封装的集合【英文标题】:EF Core: How to access multi-layered encapsulated collections 【发布时间】:2018-03-27 17:47:15 【问题描述】:

根据微软 (https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-implemenation-entity-framework-core) 来封装域行为私有属性和只读集合,如下所示:

private readonly List<OrderItem> _orderItems; 
public IReadOnlyCollection<OrderItem> OrderItems => _orderItems;

您可以像这样通过封装的订单项获取订单:

public async Task<Order> GetAsync(int orderId)
    
        var order= await _context.Orders.FindAsync(orderId);
        if (order != null)
        
            await _context.Entry(order)
                .Collection(i => i.OrderItems)
                .LoadAsync();
        

        return order;
    

但是,如果订单商品本身已经封装了如下树的列表: 供应商 -> 目录 -> 目录项 如何获取 CatalogItems 集合?

【问题讨论】:

使用通常的 EF Core Include / ThenInclude?没有具体的 DDD。 好的。我只是想知道是否有 Collection() 方法的变体来完成此操作。 【参考方案1】:

您可以将 explicit loading methods Collection / Reference 与 eager loading 方法 Include / ThenIncludeQuery 方法结合使用,部分显示在 EF Core 文档的 Querying related entities 部分。

对于供应商 -> 目录 -> CatalogItems 示例,它可能是这样的:

public async Task<Supplier> GetAsync(int supplierId)

    var supplier = await _context.Suppliers.FindAsync(supplierId);
    if (supplier != null)
    
        await _context.Entry(supplier)
            .Collection(e => e.Catalogs)
            .Query() // <--
            .Include(e => e.CatalogItems) // <--
            .LoadAsync();
    
    return supplier;

【讨论】:

以上是关于ef core 子对象集合插入顺序的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 慢速批量插入(~80k 行)

带有 EF Core 的 ASP.NET Core - DTO 集合映射

efcore get all list查询顺序不

插入嵌套对象 EF Core 5

java集合

set集合