具有“无限”深度的EF核心创建对象

时间:2018-11-06 14:32:54

标签: .net-core ef-core-2.0

我的数据库上有M对N的关系。我从MySql页面上获取了示例数据库“ sakila”。我已经按照以下步骤设置了我的模型对象。

电影表

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; }
    }

链接表清单

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; }
    }

存储表

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 对象列表,该对象具有一个清单列表,该列表具有一个影片列表和一个影片列表... 换句话说:商店[2]->库存[2270]->电影->商店[2]->库存...是无限的。

那么当我的模型到达电影对象时,如何使此停止?

1 个答案:

答案 0 :(得分:1)

Entity Framework在查询数据库对象时会默认跟踪它们。如果通过延迟加载或急切加载在查询中获取子对象或父对象,则这些对象将“存储”在(本地)上下文中。

这意味着,每当您进入调试模式并遇到断点时,您都​​可以无限浏览对象树。 在运行时,这对性能没有真正的影响。