In the next lesson, we'll learn about creating relationships between objects using Entity. Before we do, though, we'll briefly cover the virtual
modifier, which will allow us to use lazy loading with Entity.
virtual
modifierHere's an example of the virtual
modifier as it will be used in the next lesson:
public virtual ICollection<Item> Items { get; set; }
Here, we have an Items
property with a getter and setter that we are declaring as virtual
. But what exactly does virtual
mean?
Declaring something as virtual
tells our application that we reserve the right to override it. By default, all methods are not virtual
, which means they can't be overridden.
The virtual
modifier cannot be used with static
, abstract
, or private
modifiers. In the code above, Items
is public
so it can be virtual
.
Marking a property virtual
allows the Entity Framework to use lazy loading. Lazy loading just means that Entity will only retrieve information that our code explicitly requires. Let's look at an example to see why this is important.
In the next lesson, we'll be adding a one-to-many relationship where a Category
can have many Item
s. Let's say we want to get a Category
's Description
property. Without lazy loading, our application would also get all other information related to the Category
in question, including all the Item
s associated with it. That is very inefficient, especially if a Category
has thousands of Item
s associated with it and we really just need the Category
's Description
for now.
However, for lazy loading to work, Entity needs to create its own internal version of objects. In order to do this, it needs to override the properties that will be lazy loaded. This is why we need the virtual
modifier.
If an object property containing objects related to it is not declared virtual, Entity cannot lazy load. Because it's considered far more efficient, we will continue using lazy loading and virtual
properties when dealing with database relationships in Entity.
To actually use lazy loading, we will need to add the proxies package from Entity Framework Core:
$ dotnet add package Microsoft.EntityFrameworkCore.Proxies -v 5.0.0
Lesson 33 of 36
Last updated more than 3 months ago.