繁体   English   中英

EF Core - 为新的未保存实体获取相关实体

[英]EF Core - Get related entities for a new unsaved entity

除了通过 ID 手动加载它们之外,在保存新实体之前获取新实体的相关实体的最佳方法是什么? 我遵循工作单元模式并尝试获取相关实体的Name属性以进行日志记录。

在事务内创建日志条目之前尝试保存实体,但类型、状态等相关实体仍然是 null。是否可以以这种方式加载相关实体? 或者有更好的方法吗?

public class DatabaseContext : IdentityDbContext
{
    public void SaveChanges(User user)
    {
        base.Database.BeginTransaction();

        var entities = ChangeTracker.Entries()
            .Where(x => x.State == EntityState.Added)
            .ToList();

        base.SaveChanges(); // want to load the related entities after this save

        foreach (var entity in entities)
        {
            this.Add(new LogEntry(entity.Entity)); // log entry uses Name prop of related entities
        }

        base.SaveChanges();
        base.Database.CommitTransaction();
    }
}

public class Thing
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public Guid TypeId { get; set; }
    public Guid StatusId { get; set; }
    public Guid OwnerId { get; set; }
    public Guid LocationId { get; set; }

    public virtual Type Type { get; set; }
    public virtual Status Status { get; set; }
    public virtual Owner Owner { get; set; }
    public virtual Location Location { get; set; }
}

public class Type
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class Status
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

我看到有一个References属性列出了所有引用。 我们可以遍历它并加载所有引用。 看起来可以在不保存实体的情况下加载相关实体。

不确定这是否是推荐的方法。

public void SaveChanges(User user)
{
    base.Database.BeginTransaction();

    var entities = ChangeTracker.Entries()
        .Where(x => x.State == EntityState.Added)
        .ToList();

    foreach (var entity in entities)
    {
        foreach (var reference in entity.References)
        {
            entity.Reference(reference.Metadata.Name).Load();
        }

        this.Add(new LogEntry(entity.Entity));
    }

    base.SaveChanges();
    base.Database.CommitTransaction();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM