Files
ASP.NET/02-Project-Based/Session01/Session01 Backend.md
T

4.7 KiB

🛠️ Task Checklist

Preparation

EF Core Code First

🚧 Branching

  • Create the develop branch
  • Create the feature/domain-entities branch based on develop

IEntity.cs

  • Create the IEntity interface 📂 Suggested Folder: Domain/Framework/Interfaces
public interface IEntity<TKey>
{
    public TKey Id { get; set; }
}

Entity.cs

  • Create the Entity class 📂 Suggested Folder: Domain/Framework/Base
public class Entity<TKey> : IEntity<TKey>
{
    public TKey Id{ get; set; }
}

Create Entities

📂 Suggested Folder: Domain/Aggregates/[RelatedFolder] Entities represent the core business objects in our domain model. By defining them explicitly and consistently, we ensure that:

  • Our domain logic remains clear and maintainable.
  • We follow Domain-Driven Design (DDD) principles, keeping the business rules close to the data they govern.
  • All developers have a standardized structure to follow, improving code readability and collaboration.

Guidelines

  1. Base Class
    • All entities (except join tables) must inherit from Entity and explicitly specify the datatype of their Id.
  2. Properties
    • Use the latest version of the ERD to define properties and relationships.
  3. Reference Project
  4. ERD Reference
    • Latest ERD available here:
      👉 Project ERD### One Example:

Example

public class Account : Entity<long>
{
    public required string PhoneNumber { get; set; }
    public required string Password { set; get; }
    public string? Email { get; set; }
    public long? PersonId { get; set; }
    //...
}

Add Navigation Properties

Navigation properties in Entity Framework Core (EF Core) represent relationships between entities. They allow you to navigate (follow) the relationships between different tables using C# objects instead of writing SQL joins manually.

Add the needed navigation properties inside entities

🔹 Examples of Defining Navigation Properties

These are just examples, and not how the project should look like

🔹 One-to-Many Example

A Buyer can have multiple Tickets, but each Ticket belongs to one Buyer.

public class Buyer
{
    public int Id { get; set; }
    public string Name { get; set; }

    // Navigation Property (One Buyer → Many Tickets)
    public virtual ICollection<Ticket> Tickets { get; set; } = new List<Ticket>();
}

public class Ticket
{
    public int Id { get; set; }
    public int BuyerId { get; set; }

    // Navigation Property (Many Tickets → One Buyer)
    public virtual Buyer Buyer { get; set; }
}

🔹 One-to-One Example

A Ticket can have only one Transaction, and a Transaction belongs to exactly one Ticket.

public class Ticket
{
    public int Id { get; set; }

    // One-to-One Navigation Property
    public virtual Transaction Transaction { get; set; }
}

public class Transaction
{
    public int Id { get; set; }
    public int TicketId { get; set; }

    // One-to-One Navigation Property
    public virtual Ticket Ticket { get; set; }
}

🔹 Many-to-Many Example

A Buyer can buy many Tickets, and each Ticket can be bought by many Buyers (if resale is allowed).

public class Buyer
{
    public int Id { get; set; }
    public string Name { get; set; }

    // Many-to-Many Navigation Property
    public virtual ICollection<Ticket> Tickets { get; set; } = new List<Ticket>();
}

public class Ticket
{
    public int Id { get; set; }

    // Many-to-Many Navigation Property
    public virtual ICollection<Buyer> Buyers { get; set; } = new List<Buyer>();
}

Add Packages to Infrastructure Project

  • Add Microsoft.EntityFrameworkCore.Proxies to Infrastructure Project

🚧 Merge

  • Create a PR and merge the current branch with develop

🧠 Hints & Notes

  • Mark navigation properties virtual

🙌 Acknowledgements

  • ChatGPT for snippet refinement and explanations

🔍 References

Session01 Additional Info