Exemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EFCoreDataContext"/> class.
 /// </summary>
 /// <param name="modelBuilderFactory">The model builder factory.</param>
 /// <param name="dataSource">The data source.</param>
 /// <param name="options">The options.</param>
 public EFCoreDataContext(IEFCoreModelBuilderFactory modelBuilderFactory, IEntityMapFactory mapFactory, string dataSource, DbContextOptions options)
     : base(options)
 {
     _modelBuilderFactory = modelBuilderFactory;
     this.mapFactory      = mapFactory;
     _dataSource          = dataSource;
 }
        /// <summary>
        /// Builds the model mappings.
        /// </summary>
        /// <param name="modelBuilder">The model builder.</param>
        public void AppendModelMappings(ModelBuilder modelBuilder, IEntityMapFactory mapFactory)
        {
            var types    = this._modelAssemblies.SelectMany(x => x.GetTypes());
            var mapTypes = from t in types
                           where
                           t.BaseType != null &&
                           t.BaseType != typeof(object) &&
                           typeof(TEntity).IsAssignableFrom(t) &&
                           !t.IsAbstract &&
                           ApplyDataSourceFilter(t)
                           select t;

            foreach (var mapType in mapTypes)
            {
                var binderMethod = modelBuilder.GetType()
                                   .GetMethods(BindingFlags.Instance | BindingFlags.Public)
                                   .First(x => x.Name == nameof(modelBuilder.Entity) && x.IsGenericMethod)
                                   .MakeGenericMethod(mapType);

                var genericEntityTypeBuilder = binderMethod.Invoke(modelBuilder, new object[] { }) as EntityTypeBuilder;
                this.ApplyAttributeSpecs(mapType, genericEntityTypeBuilder);

                var maps = mapFactory.GetMapsFor(mapType);

                foreach (var map in maps)
                {
                    map.Configure(genericEntityTypeBuilder);
                }
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="EFCoreAsyncWorkAroundDbContext"/> class.
 /// </summary>
 /// <param name="modelBuilderFactory">The model builder factory.</param>
 /// <param name="dataSource">The data source.</param>
 /// <param name="options">The options.</param>
 public EFCoreAsyncWorkAroundDbContext(IEFCoreModelBuilderFactory modelBuilderFactory, IEntityMapFactory mapperFactory, string dataSource, DbContextOptions options)
     : base(modelBuilderFactory, mapperFactory, dataSource, options)
 {
     _modelBuilderFactory = modelBuilderFactory;
     _dataSource          = dataSource;
 }