首页 > 解决方案 > Entity Framework Core - 使用依赖注入而不是“上下文”从链接表中检索影子属性

问题描述

我注意到有很多地方使用下面的代码结构:

context.Entry(Notes).Property("CreatedOn").CurrentValue = DateTime.Now;

无论好坏,我都在使用存储库模式,并且我使用依赖注入来访问记录。特别是我loadRelatedEntities(延迟加载)访问客户端记录上的注释信息。

这是客户实体:

public class Client : IEntityBase, IAuditedEntityBase
{
    public Client()
    {
        Jobs = new List<Job>();
    }

    public int Id { get; set; }

    public string ClientNo { get; set; } = default!;
    public string? ClientFirstName { get; set; }
    public string ClientLastName { get; set; } = default!;

    public virtual ICollection<Note>? Notes { get; }
}

我的Note实体如下:

public class Note : IEntityBase, IAuditedEntityBase
{
    #nullable enable
    public Note()
    {
    }

    public int Id { get; set; }
    public string? Details { get; set; }

    public int? JobId { get; set; }
    public virtual Job? Job { get; set; }

    public int? ClientId { get; set; }
    public virtual Client? Client { get; set; }

    public int? NoteTypeId { get; set; }
    public virtual NoteType NoteType { get; set; }
}

在我的客户端存储库中,我有以下内容:

public class ClientDATARepository : EntityBaseDATARepository<Client>, IClientDATARepository
{
    private readonly DATAContext _context;

    public ClientDATARepository(DATAContext context) : base(context)
    {
        _context = context;
    }

    public void RelatedClientEntities(Client client)
    {
        _context.Entry(client).Reference(j => j.Notes).Load();
    }
}

更新这里是我的笔记库:

using JobsLedger.DATA.ENTITIES;
using JobsLedger.DATA.Repositories.Interfaces;

namespace JobsLedger.DATA.Repositories
{
    public class NoteDATARepository : EntityBaseDATARepository<Note>, INoteDATARepository
    {
        public NoteDATARepository(DATAContext context) : base(context) { }
    }
}

我在存储库中使用“上下文”并使用依赖注入来访问相关类中的数据,在这种情况下ClientServices

public class ClientServices : IClientServices 
{
        IClientDATARepository clientDATARepository,

        public ClientServices(IClientDATARepository clientDATARepository,
        {
            ClientDATARepository = clientDATARepository;
        }
}    

所以在那个使用依赖注入来加载客户端存储库的类中;结果,我有一个加载了相关实体的客户端,特别是“Notes”。

ClientDATARepository.RelatedClientEntities(client);

所以如果我去说:

var noteModel = client.notes

并检查笔记我只得到在实体中设置的实体属性,没有阴影属性。

我还注意到我不能使用

context.Entry(Notes).Property("CreatedOn").CurrentValue = DateTime.Now;

因为我无法访问上下文...

因此,鉴于我使用存储库来获取客户端,在这种情况下,而不是直接获取上下文,我如何访问链接到客户端的笔记的那些影子属性?

标签: c#asp.net-coreentity-framework-core

解决方案


推荐阅读