...
/Configuring One-to-Many Relationships
Configuring One-to-Many Relationships
Learn how to configure a one-to-many relationship using default conventions, data annotations, and fluent API.
Overview
In this lesson, we review the conventions between two entities that automatically result in a one-to-many relationship between their corresponding tables in the database. Later we’ll see how to supplement these conventions using data annotations and the fluent API.
Note: The commands in this lesson generate code and files. Through the terminal, we can navigate to these files by using relevant Linux commands such as
ls
to view a list of files and directories,cd
to change directories, andcat
to view file contents. A SPA widget showing the updated project with the generated files is also available. Also, note that EF Core uses a timestamp within the generated file names. We represent these names withxxx
.
Default conventions
There are several conventions by which we establish a one-to-many relationship between two entities. Let’s discuss a couple of them.
Single navigation property
We can create a one-to-many relationship between two entities by including a navigation property in one of the entities. We see this arrangement in the project below:
{ "version": "0.2.0", "configurations": [ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "name": ".NET Core Launch (console)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/net6.0/Relationships.dll", "args": [], "cwd": "${workspaceFolder}", // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console "console": "internalConsole", "stopAtEntry": false }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach" } ] }
Click the “Run” button above, then execute the command below in the terminal:
dotnet ef migrations add SingleNavigationPropertyWithCollectionProperty
After executing the code above, our updated project is below:
{ "version": "0.2.0", "configurations": [ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "name": ".NET Core Launch (console)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/net6.0/Relationships.dll", "args": [], "cwd": "${workspaceFolder}", // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console "console": "internalConsole", "stopAtEntry": false }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach" } ] }
Note the following in the updated project:
-
There is a relationship between the
Employee
andAlbum
entities whereEmployee
is the principal entity whileAlbum
is the dependent entity. -
An employee (artist) can have many albums, and we achieve this by including a ...