📜  Entity Framework-Fluent API(1)

📅  最后修改于: 2023-12-03 15:00:36.406000             🧑  作者: Mango

Entity Framework-Fluent API

Entity Framework-Fluent API 是 Entity Framework 的另一种配置方式,它允许开发者通过配置模型实体的属性来控制数据库生成的形式、约束以及其他一些细节。

与基于特性的配置方式相比,Fluent API 更加显式和灵活。

下面是一些使用 Fluent API 的示例。

基础

对于每个实体类型,都有一个对应的配置类,可以使用 EntityTypeBuilder<TEntity> 创建。以下代码演示了如何使用 Fluent API 配置实体的主键。

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

public class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasKey(b => b.BlogId);
    }
}
实体属性

Fluent API 也允许配置实体属性。以下示例演示如何配置列名和列类型。

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public DateTime CreatedDate { get; set; }
}

public class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.CreatedDate)
            .HasColumnType("datetime2")
            .HasColumnName("CreatedAt");
    }
}
关系

使用 Fluent API 也可以配置实体之间的关系。以下示例演示如何配置一对多关系。

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public ICollection<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

public class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasMany(b => b.Posts)
            .WithOne(p => p.Blog)
            .HasForeignKey(p => p.BlogId);
    }
}
总结

在使用 Entity Framework 时,Fluent API 是一种更加灵活、更加显式的配置方式,它允许开发者更好地控制数据库生成的形式和细节。虽然 Fluent API 的学习曲线可能比特性配置要陡峭一些,但是一旦掌握,它将成为您 Entity Framework 开发工具包中的强有力的工具。