Data annotations are attributes you put on entity classes and properties to configure the model. EF Core reads them when it builds the model, so they shape the schema that migrations create.
public class Product
{
[Key]
public int ProductId { get; set; }
[Required]
[MaxLength(100)]
public string Name { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal Price { get; set; }
[ForeignKey("CategoryId")]
public Category Category { get; set; }
[NotMapped]
public string DisplayName { get; set; }
}
[Key] marks the primary key
[Required] makes Name a non-null column
[MaxLength(100)] sets its length
[Column(TypeName = ...)] picks the SQL type
[ForeignKey] names the foreign key behind a navigation
[NotMapped] leaves a property out of the table
Other common ones are [DatabaseGenerated], [Table] and [InverseProperty]. [Required], [MaxLength] and [Range] also drive validation in ASP.NET Core.
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.