...
/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
lsto view a list of files and directories,cdto change directories, andcatto 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
EmployeeandAlbumentities whereEmployeeis the principal entity whileAlbumis the dependent entity. -
An employee (artist) can have many albums, and we achieve this by including a ...