模型配置可以通過Fluent API和註解的方式 FluentAPI步驟 新建Products 和Category類 新建Products類 Products public class Product { public int Id { get; set; } public string Name ...
模型配置可以通過Fluent API和註解的方式
- FluentAPI步驟
- 新建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; } }
- 新建Products 和Category類
- 他們之間存在一對多的關係
配置實體屬性
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")]:用於指定外鍵屬性