netcore模型配置

发布时间 2023-07-18 14:32:20作者: 小溪_1

模型配置可以通过Fluent API和注解的方式

  1. FluentAPI步骤
    1.  新建Products 和Category类

      新建Products类

      Products
      public class Product
          {
              public int Id { get; set; }
      
              public string Name { get; set; }
      
              public decimal Price { get; set; }
      
              public int CategoryId { get; set; }
      
              public virtual Category Category { get; set; }
      
              public string Description { get; set; }
      
              public DateTime CreateTime { get; set; }
      
              public DateTime UpdateTime { get; set; }
          }

       

       

      新建Category类

      Category
       public class Category
          {
              public int Id { get; set; }
      
              public string Name { get; set; }
      
              public ICollection<Product> Products { get; set; }
          }
  2. 他们之间存在一对多的关系
配置实体属性
protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            #region Product
            modelBuilder.Entity<Product>().ToTable("Products", "dbo")
                .Property(p => p.Name)
                .HasColumnName("ProductName");//配置表名 列名

            modelBuilder.Entity<Product>().HasKey(r => r.Id);//配置主键
    
            modelBuilder.Entity<Product>()
                .Property(r => r.Name).IsRequired()
                .HasMaxLength(500);//配置长度 和必填

            modelBuilder.Entity<Product>()
                .Property(r => r.CreateTime).HasDefaultValue(DateTime.Now);//配置默认值


            modelBuilder.Entity<Product>()
                .Property(r => r.Price).HasColumnType("decimal(18,2)").IsRequired();

            #endregion
            #region Category
            modelBuilder.Entity<Category>().ToTable("Categories", "dbo")
                .Property(c => c.Name)
                .HasColumnName("CategoryName");
            modelBuilder.Entity<Category>().HasKey(r => r.Id);
            modelBuilder.Entity<Product>()
                .HasOne(p => p.Category)
                .WithMany(c => c.Products)
                .HasForeignKey(p => p.CategoryId);
            #endregion
            base.OnModelCreating(modelBuilder);
        }

Fluent API  配置一对一的关系

一对一关系表示两个实体存在唯一的关系,每个实体只能关联到另一个实体

新建User和UserAddress类

User类
  public class User
    {
        public int Id { get; set; }

        public string UserName { get; set; }

        public UserAddress UserAddress { get; set; }
    }

FluentAPI 中多对多关系

例如Student和Course之间存在多对多关系

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

        public string Name { get; set; }

        public ICollection<Course> Courses { get; set; }
    }

 

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

        public string Name { get; set; }

        public ICollection<Student> Students { get; set; }
    }
OnModelCreating中配置
   modelBuilder.Entity<Student>()
                .HasMany(r => r.Courses)
                .WithMany(r => r.Students)
                .UsingEntity(r => r.ToTable("StudentCourse"));
            #endregion
            base.OnModelCreating(modelBuilder);

 

注解形式
数据注解通过实体类的属性添加特性来指定配置信息

  • [Key]指定主键属性
  • [Require]指定必填属性(非空)
  • [MaxLength(100)]最大为100的长度,字符串属性的最大长度
  • [ColumnName("ProductName")] 用于指定属性列对应的数据库列名
  • [Table("Products")]用于指定实体对应数据库的表名
  • [ForeignKey("ColumnID")]:用于指定外键属性
  •  
  1.