Entity Framework Code First 数据库配置

Entity Framework(EF)Code First是一种用于.NET平台的对象关系映射(ORM)技术,它允许开发者通过C#类定义来创建数据库模式。本文将介绍如何使用Data Annotations和Fluent API两种方式来配置数据库。

使用Data Annotations配置数据库

Code First开发模式中,Data Annotations是一种通过在类属性上添加属性来定义数据库结构的简单方式。例如,可以为字符串类型的属性指定最大长度,或者标记某个属性为必填项。

public class Project { public int ProjectId { get; set; } [MaxLength(255)] [Required] public string Name { get; set; } public int ManagerId { get; set; } [ForeignKey("ManagerId")] public Person Manager { get; set; } }

在上面的代码中,定义了Project类,其中Name属性被标记为必填项,并且最大长度被限制为255字符。

public class Person { public int PersonId { get; set; } public string LastName { get; set; } public string FirstName { get; set; } [Column("Birth")] public DateTime BirthDate { get; set; } }

在这个Person类中,通过Column属性改变了BirthDate属性对应的数据库列名,将其从默认的BirthDate改为了Birth。

public class Task { public int TaskId { get; set; } public string Title { get; set; } public string Description { get; set; } public int PersonId { get; set; } [ForeignKey("PersonId")] public Person AssignedTo { get; set; } public int ProjectId { get; set; } [ForeignKey("ProjectId")] public Project Project { get; set; } } public class Project { public int ProjectId { get; set; } [MaxLength(255)] [Required] public string Name { get; set; } public List Tasks { get; set; } }

Task类中定义了两个外键属性,分别指向Person和Project类。通过Data Annotations,能够直接在类定义中声明外键关系。

使用Fluent API配置数据库

Fluent API是Entity Framework提供的一种更为灵活和强大的数据库配置方式。它允许在DbContext派生类的OnModelCreating方法中定义复杂的数据库结构。

public class MyContext : DbContext { public DbSet Persons { get; set; } public DbSet Projects { get; set; } public DbSet Tasks { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity().HasRequired(t => t.Project).WithMany(p => p.Tasks).HasForeignKey(t => t.ProjectId).WillCascadeOnDelete(false); modelBuilder.Entity().HasRequired(t => t.AssignedTo); } }

在MyContext类中,使用Fluent API定义了Task和Project之间的一对多关系,并且指定了在删除Project时不会级联删除Task。

modelBuilder.Entity().Property(d => d.BirthDate).HasColumnName("Birth");

通过Fluent API,可以在不使用Data Annotations的情况下定义列名。

modelBuilder.Entity().HasRequired(p => p.Manager);

在这个例子中,使用Fluent API指定了Project类必须有一个Manager属性。

modelBuilder.Entity().Property(p => p.Name).HasMaxLength(255).IsRequired();
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485