EF Core 创建具有 "infinite" 深度的对象

EF Core Creating Object with "infinite" depth

我的数据库中有 M 对 N 关系。我从 MySql 页面获取示例数据库 "sakila"。我已经按如下方式设置了我的模型对象。

电影Table

public partial class Film
    {
        public Film()
        {
            FilmActor = new HashSet<FilmActor>();
            FilmCategory = new HashSet<FilmCategory>();
            Inventory = new HashSet<Inventory>();
        }

        //Some Properties


        public ICollection<Inventory> Inventory { get; set; }
    }

链接Table库存

public partial class Inventory
    {
        public Inventory()
        {
            Rental = new HashSet<Rental>();
        }

        public int InventoryId { get; set; }
        public short FilmId { get; set; }
        public byte StoreId { get; set; }
        public DateTimeOffset LastUpdate { get; set; }

        public Film Film { get; set; }
        public Store Store { get; set; }
        public ICollection<Rental> Rental { get; set; }
    }

店铺Table

public partial class Store
    {
        public Store()
        {
            Customer = new HashSet<Customer>();
            Inventory = new HashSet<Inventory>();
            Staff = new HashSet<Staff>();
        }

        //More Properties
        public ICollection<Inventory> Inventory { get; set; }

    }

当我通过存储库检索数据时,我得到了一个 Store 对象的列表,其中有一个 Inventory 列表,其中有一个电影列表,其中有一个列表商店... 换句话说: store[2]->inventory[2270]->film->store[2]->inventory... ad infinitum.

那么,当我的模型到达胶片对象时,我该如何停止呢?

Entity Framework 在您查询数据库对象时默认跟踪它们。如果您通过延迟加载或急切加载在查询中获取子对象或父对象,它们将在(本地)上下文中 "stored" 。

这意味着无论何时您进入调试模式并遇到断点,您都可以无限地遍历您的对象树。 在运行时,这对性能没有实际影响。