翼度科技»论坛 编程开发 .net 查看内容

netcore模型配置

5

主题

5

帖子

15

积分

新手上路

Rank: 1

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

  • FluentAPI步骤

    •  新建Products 和Category类新建Products类
      Products
      1. public class Product
      2.     {
      3.         public int Id { get; set; }
      4.         public string Name { get; set; }
      5.         public decimal Price { get; set; }
      6.         public int CategoryId { get; set; }
      7.         public virtual Category Category { get; set; }
      8.         public string Description { get; set; }
      9.         public DateTime CreateTime { get; set; }
      10.         public DateTime UpdateTime { get; set; }
      11.     }
      复制代码
       
       
      新建Category类
      Category
      1. public class Category
      2.     {
      3.         public int Id { get; set; }
      4.         public string Name { get; set; }
      5.         public ICollection<Product> Products { get; set; }
      6.     }
      复制代码

  • 他们之间存在一对多的关系
配置实体属性
  1. protected override void OnModelCreating(ModelBuilder modelBuilder)
  2.         {
  3.             #region Product
  4.             modelBuilder.Entity<Product>().ToTable("Products", "dbo")
  5.                 .Property(p => p.Name)
  6.                 .HasColumnName("ProductName");//配置表名 列名
  7.             modelBuilder.Entity<Product>().HasKey(r => r.Id);//配置主键
  8.    
  9.             modelBuilder.Entity<Product>()
  10.                 .Property(r => r.Name).IsRequired()
  11.                 .HasMaxLength(500);//配置长度 和必填
  12.             modelBuilder.Entity<Product>()
  13.                 .Property(r => r.CreateTime).HasDefaultValue(DateTime.Now);//配置默认值
  14.             modelBuilder.Entity<Product>()
  15.                 .Property(r => r.Price).HasColumnType("decimal(18,2)").IsRequired();
  16.             #endregion
  17.             #region Category
  18.             modelBuilder.Entity<Category>().ToTable("Categories", "dbo")
  19.                 .Property(c => c.Name)
  20.                 .HasColumnName("CategoryName");
  21.             modelBuilder.Entity<Category>().HasKey(r => r.Id);
  22.             modelBuilder.Entity<Product>()
  23.                 .HasOne(p => p.Category)
  24.                 .WithMany(c => c.Products)
  25.                 .HasForeignKey(p => p.CategoryId);
  26.             #endregion
  27.             base.OnModelCreating(modelBuilder);
  28.         }
复制代码
Fluent API  配置一对一的关系
一对一关系表示两个实体存在唯一的关系,每个实体只能关联到另一个实体
新建User和UserAddress类
User类
  1.   public class User
  2.     {
  3.         public int Id { get; set; }
  4.         public string UserName { get; set; }
  5.         public UserAddress UserAddress { get; set; }
  6.     }
复制代码
FluentAPI 中多对多关系
例如Student和Course之间存在多对多关系
Student
  1.   public class Student
  2.     {
  3.         public int Id { get; set; }
  4.         public string Name { get; set; }
  5.         public ICollection<Course> Courses { get; set; }
  6.     }
复制代码
 
Course
  1.   public class Course
  2.     {
  3.         public int Id { get; set; }
  4.         public string Name { get; set; }
  5.         public ICollection<Student> Students { get; set; }
  6.     }
复制代码
OnModelCreating中配置
  1.    modelBuilder.Entity<Student>()
  2.                 .HasMany(r => r.Courses)
  3.                 .WithMany(r => r.Students)
  4.                 .UsingEntity(r => r.ToTable("StudentCourse"));
  5.             #endregion
  6.             base.OnModelCreating(modelBuilder);
复制代码
 
注解形式
数据注解通过实体类的属性添加特性来指定配置信息

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

  •  

来源:https://www.cnblogs.com/xiaoxi888/archive/2023/07/18/17562757.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具