簡體   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