2016-10-25 51 views

回答

2

我剛剛偶然發現了這個問題,因爲我自己正在尋找答案。我發現它不是(但?)在EF內核中實現的,但可以很容易地實現。

您可以創建下列操作之一:

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.. 
}