Use data annotation
Entity classes usually add attribute annotation directly to entity classes in the Models directory, such as [Required]/[Key]
using System.ComponentModel.DataAnnotations; public class User() { [Key] public string UserId { get; set; } [Required] public string UserName { get; set; } }
Override configuration method
The configuration method is rewritten in the context class of XxxDbContext database, and the configuration of all entities is added by Fluent API
using Microsoft.EntityFrameworkCore; public partial class XxxDbContext : DbContext { public XxxDbContext() { } public HaoyikuDbContext(DbContextOptions<HaoyikuDbContext> options) : base(options) { } public DbSet<User> Users { get; set; } // Override the following methods protected override void OnModelCreating(ModelBuilder modelBuilder) { // Add configuration for entity modelBuilder.Entity<BizOrderPush>().HasKey(); } }
Implement entity class configuration interface
- Create a new ModelConfigurations directory, where you can add configuration classes corresponding to each entity
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; /// <summary> ///User entity model configuration /// </summary> public class UserConfiguration : IEntityTypeConfiguration<User> { public void Configure(EntityTypeBuilder<User> builder) { builder.HasKey(o => o.UserId); builder.Property(o => o.UserName).IsRequired(); } }
After each entity class is configured separately, it can be set by the following methods
using Microsoft.EntityFrameworkCore; public partial class XxxDbContext : DbContext { public XxxDbContext() { } public HaoyikuDbContext(DbContextOptions<HaoyikuDbContext> options) : base(options) { } public DbSet<User> Users { get; set; } // Override the following methods protected override void OnModelCreating(ModelBuilder modelBuilder) { // Add configuration for entity modelBuilder.ApplyConfiguration(new UserConfiguration()); base.OnModelCreating(modelBuilder); } }
The above ways can coexist. As for which one to use and which one to recommend, let's see