SaveChanges 上的 EF 从关系中获取具有特定类型的实体

EF on SaveChanges get entity that has specific type from relation

我有测试类:

public class Human
{
    public string Id { get; set; }
    public string Name { get; set; }
    public Pet Pet { get; set; }
}

public class Pet
{
    public string Id { get; set; }
    public string Name { get; set; }
}

在 SaveChanges 中,我想知道即将到来的实体是否与 Human 相关,并获取 Human 实体。

public override int SaveChanges()
{
    List<ObjectStateEntry> changedEntries =
                            ((IObjectContextAdapter)this).ObjectContext
    .ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified).ToList();
}

当我更改 Pet 实体中的名称时,在 SaveChanges 中只有实体 Pet 的状态已修改,现在我想从这个实体 Pet 知道并获取 Human 实体。我会知道 Human 已更改为 因为他的 Pet 有其他名称,一些信息已更改。有什么想法吗?

看起来您可能需要导航属性。

public class Human {
    public string Id { get; set; }
    public string Name { get; set; }
    public Pet Pet { get; set; }
}

public class Pet {
    public string Id { get; set; }
    public string Name { get; set; }
    public string HumanId {get; set;}
    public virtual Human {get; set;}
}

然后您可以像这样从 Pet 对象引用 Humanpet.Human

我会将我的 类 重构为此,但这取决于您:

public class Human {
    [Key]
    public int HumanId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Pet> Pets { get; set; }
}

public class Pet {
    [Key]
    public int PetId { get; set; }
    public string Name { get; set; }
    public int HumanId {get; set;}
    public virtual Human Owner {get; set;}
}