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" 。
这意味着无论何时您进入调试模式并遇到断点,您都可以无限地遍历您的对象树。
在运行时,这对性能没有实际影响。
我的数据库中有 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" 。
这意味着无论何时您进入调试模式并遇到断点,您都可以无限地遍历您的对象树。 在运行时,这对性能没有实际影响。