2016-10-25 8 views

ответ

2

Я только что наткнулся на этот вопрос, поскольку сам искал ответ. Я обнаружил, что это не (пока?) Реализовано в EF Core, но может быть реализовано довольно легко.

Вы можете создать один из них:

using Microsoft.EntityFrameworkCore.Metadata.Builders; 

namespace Microsoft.EntityFrameworkCore 
{ 
    public abstract class EntityTypeConfiguration<TEntity> where TEntity : class 
    { 
     public abstract void Map(EntityTypeBuilder<TEntity> modelBuilder); 
    } 

    public static class ModelBuilderExtensions 
    { 
     public static void AddConfiguration<TEntity>(this ModelBuilder modelBuilder, EntityTypeConfiguration<TEntity> configuration) where TEntity : class 
     { 
      configuration.Map(modelBuilder.Entity<TEntity>()); 
     } 
    } 
} 

И тогда вы можете создать конфигурацию для самого объекта: -

using Microsoft.EntityFrameworkCore; 
using Project.Domain.Models; 
using Microsoft.EntityFrameworkCore.Metadata.Builders; 

namespace Project.Persistance.EntityConfigurations 
{ 
    public class MyEntityConfiguration : EntityTypeConfiguration<MyEntity> 
    { 
     public override void Map(EntityTypeBuilder<MyEntity> modelBuilder) 
     { 
      modelBuilder 
       .Property();//config etc 
     } 
    } 
} 

Вы можете загрузить все ваши конфигурации где-то (там, наверное, как лучший способ, так и лучшее место для этого ... но это то, что я сделал): -

using Microsoft.EntityFrameworkCore; 
using Project.Domain.Models; 
using Project.Persistance.EntityConfigurations; 

namespace Project.Persistance 
{ 
    public class MyDbContext : DbContext 
    { 
     // Normal DbContext stuff here 

     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
      modelBuilder.AddConfiguration(new MyEntityConfiguration()); 
     } 
    } 
} 
0

Это даже проще в ядре 2.0 теперь

using Microsoft.EntityFrameworkCore; 
using Microsoft.EntityFrameworkCore.Metadata.Builders; 

namespace MyApp.DAL.EntityConfigurations 
{ 
    public class StudentConfiguration : IEntityTypeConfiguration<Student> 
    { 
     public void Configure(EntityTypeBuilder<Student> modelBuilder) 
     { 

      modelBuilder.Property(f => f.Name).IsRequired(); 

     } 
    } 
} 

Затем в контексте дб:

public DbSet<Student> Students{ get; set; } 

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } 

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    base.OnModelCreating(builder); 

    // Customizations must go after base.OnModelCreating(builder) 

    builder.ApplyConfiguration(new StudentConfig()); 
    builder.ApplyConfiguration(new SomeOtherConfig()); 

    // etc. 
    // etc.. 
}