使用Fluent API进行模型配置

Entity Framework中,Fluent API提供了一种强大而灵活的方式来配置数据模型。本文将通过一个简单的例子,展示如何使用Fluent API来定义模型的属性和关系。请注意,由于Fluent API可能会随着Entity Framework版本的更新而发生变化,因此本文所介绍的内容可能在未来的版本中有所不同。

示例模型

在本例中,将使用以下模型:

public class SchoolEntities : DbContext { #region Properties public DbSet Courses { get; set; } public DbSet Departments { get; set; } #endregion #region Methods protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 在这里编写Fluent API代码 } #endregion } public partial class Course { #region Properties public int CourseID { get; set; } public string Title { get; set; } public string Days { get; set; } public DateTime Time { get; set; } public string Location { get; set; } public int Credits { get; set; } public int DepartmentID { get; set; } public virtual Department Department { get; set; } #endregion } public class Department { #region Properties public int DepartmentID { get; set; } public string Name { get; set; } public decimal Budget { get; set; } public DateTime StartDate { get; set; } public int Administrator { get; set; } public virtual ICollection Courses { get; set; } #endregion }

Fluent API示例

创建模型后,可以使用Fluent API来配置模型。主要的配置工作是在DbContext类中重写的OnModelCreating方法中完成的。该方法接收一个ModelBuilder实例,可以使用它来配置模型。以下示例展示了如何使用API进行一些配置:

protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity() .Property(d => d.Name) .IsRequired() .HasMaxLength(50); modelBuilder.Entity() .Property(d => d.DepartmentID) .HasDatabaseGenerationOption(DatabaseGenerationOption.None); modelBuilder.Entity() .HasMany(d => d.Courses) .WithRequired(c => c.Department) .HasForeignKey(c => c.DepartmentID) .WillCascadeOnDelete(); modelBuilder.Entity() .Ignore(d => d.Administrator); modelBuilder.Entity() .Property(c => c.Title) .IsRequired() .HasColumnName("Name"); }

配置说明

以上代码展示了如何配置实体。首先,使用Entity方法并传入实体作为泛型参数。然后,可以开始使用Fluent API来配置模型。第一行代码配置了Department实体的Name属性为必填项,并且长度不超过50个字符。第二行代码配置了DepartmentID属性为非数据库生成(默认情况下,所有ID都是数据库生成的)。第三行代码创建了部门与其课程集合之间的一对多关系。首先使用HasMany表示多的一方,然后使用WithRequired表示一的一方。HasForeignKey表示多的一方的外键。最后的方法WillCascadeOnDelete将添加级联删除到实体图。第四行代码将强制模型忽略部门的Administrator属性,因此它不会被生成到数据库中。第五行代码表示Title属性是必填的,并且在数据库中列的名称将是Name而不是Title。

创建数据并插入数据库

以下是一个简单的示例,展示了如何创建数据并将其插入数据库:

class Program { static void Main(string[] args) { using (SchoolEntities context = new SchoolEntities()) { var department = new Department { DepartmentID = 1, Administrator = 2, Budget = 100000, Name = "Data Access", StartDate = DateTime.Now }; var course = new Course { Credits = 2, Days = "MF", Location = "Class 1", Time = DateTime.Now, Title = "Entity Framework", Department = department, }; context.Departments.Add(department); context.SaveChanges(); } } }

数据库生成

public SchoolEntities() : base("MySchool") { }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485