首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >EF核心- ChangeTracker.DetectChanges从特定属性获取值

EF核心- ChangeTracker.DetectChanges从特定属性获取值
EN

Stack Overflow用户
提问于 2019-04-25 00:59:26
回答 1查看 618关注 0票数 0

我需要从EF的ChangeTracker中的关系中获取属性的值。

我有这样的课程:

代码语言:javascript
复制
public class ClienteInfo
{
    public Guid Id { get; set; }
    public Guid IdTipoCliente { get; set; }
    public string Nome { get; set; }
    public bool Ativo { get; set; }
    public bool Bloqueado { get; set; }

    public virtual TipoClienteInfo TipoCliente { get; set; }
}

public class TipoClienteInfo
{
     public Guid Id { get; set; }
     public string Nome { get; set; }
     public bool Ativo { get; set; }

     public virtual ICollection<ClienteInfo> Clientes { get; set; }
}

要审核日志,请在属性IdTipoCliente上获取TipoClienteInfo的属性Nome

我的ContextClass:

代码语言:javascript
复制
public class DataBaseContext : DbContext
{
    public DbSet<ClienteInfo> Cliente { get; set; }
    public DbSet<TipoClienteInfo> TipoCliente { get; set; }


    public override async Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default(CancellationToken))
    {
        ChangeTracker.DetectChanges();

        foreach (var entry in ChangeTracker.Entries())
        {
            foreach (var property in entry.Properties)
            {
                //GET HERE THE VALUE
            }
        }

        var result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
        return result;
    }


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        RegisterMaps(modelBuilder);
    }

    public static void RegisterMaps(ModelBuilder builder)
    {
        builder.ApplyConfiguration(new ClienteMaps());
        builder.ApplyConfiguration(new TipoClienteMaps());
    }
}

我认为使用属性,relfection,但不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-25 03:37:08

您可以通过如下查询从引用(此处:ClienteInfo.TipoCliente)获取属性值:

代码语言:javascript
复制
ChangeTracker.Entries<ClienteInfo>()
    .Select(e => e.Reference(c => c.TipoCliente)
                  .TargetEntry.CurrentValues["Nome"])

从你的问题中还不清楚你到底想用这些值做什么,但这应该会让你走上正确的道路。

有几种方法可以更动态地使用它并添加变量/参数,例如:

代码语言:javascript
复制
var referenceName = "TipoCliente";
var propertyName = "Nome";

var values = ChangeTracker.Entries<ClienteInfo>()
                  .Select(e => e.Reference(referenceName)
                                .TargetEntry.CurrentValues[propertyName])
                  .ToList();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55835136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档