Vytvoření a konfigurace modelu

Entity Framework Core používá sadu konvencí k sestavení modelu na základě tvaru tříd entit. Můžete zadat další konfiguraci, která doplní nebo přepíše to, co bylo zjištěno konvencí.

Tento článek popisuje konfiguraci, kterou je možné použít pro model cílený na libovolné úložiště dat a který je možné použít při cílení na jakoukoli relační databázi. Poskytovatelé mohou také povolit konfiguraci, která je specifická pro konkrétní úložiště dat. Dokumentaci ke konfiguraci specifické pro poskytovatele najdete v části Poskytovatelé databáze.

Tip

Ukázku tohoto článku najdete na GitHub.

Použití rozhraní Fluent API ke konfiguraci modelu

Metodu můžete přepsat OnModelCreating v odvozeném kontextu a ke ModelBuilder API konfiguraci modelu použít . Toto je nejvýkonnější způsob konfigurace a umožňuje zadat konfiguraci beze změny tříd entit. Fluent rozhraní API má nejvyšší prioritu a přepíše konvence a datové poznámky.

using Microsoft.EntityFrameworkCore;

namespace EFModeling.EntityProperties.FluentAPI.Required;

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

    #region Required
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Url)
            .IsRequired();
    }
    #endregion
}

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

Konfigurace seskupení

Chcete-li zmenšit velikost OnModelCreating metody, je možné extrahovat všechny konfigurace pro typ entity do samostatné třídy implementující IEntityTypeConfiguration<TEntity>.

public class BlogEntityTypeConfiguration : IEntityTypeConfiguration<Blog>
{
    public void Configure(EntityTypeBuilder<Blog> builder)
    {
        builder
            .Property(b => b.Url)
            .IsRequired();
    }
}

Pak stačí vyvolat metodu Configure z OnModelCreating.

new BlogEntityTypeConfiguration().Configure(modelBuilder.Entity<Blog>());

Je možné použít všechny konfigurace zadané v typech implementující IEntityTypeConfiguration v daném sestavení.

modelBuilder.ApplyConfigurationsFromAssembly(typeof(BlogEntityTypeConfiguration).Assembly);

Poznámka

Pořadí, ve kterém se konfigurace použijí, není definováno, proto by se tato metoda měla použít pouze v případě, že pořadí není důležité.

Použití datových poznámek ke konfiguraci modelu

Můžete také použít atributy (označované jako datové poznámky) na třídy a vlastnosti. Datové poznámky přepisují konvence, ale přepisují se konfigurací Fluent API.

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;

namespace EFModeling.EntityProperties.DataAnnotations.Annotations;

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

[Table("Blogs")]
public class Blog
{
    public int BlogId { get; set; }

    [Required]
    public string Url { get; set; }
}