/// <summary> /// Applies the specified <see cref="IMappingConfiguration"/> /// </summary> /// <param name="profile">The <see cref="Profile"/> to configure</param> /// <param name="configuration">The <see cref="IMappingConfiguration"/> to apply</param> public static void ApplyConfiguration(this Profile profile, IMappingConfiguration configuration) { foreach (Type configurationType in configuration.GetType() .GetInterfaces() .Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IMappingConfiguration <,>))) { Type sourceType = configurationType.GetGenericArguments()[0]; Type destinationType = configurationType.GetGenericArguments()[1]; GenericApplyConfigurationMethod.MakeGenericMethod(sourceType, destinationType).Invoke(null, new object[] { profile, configuration }); } }
/// <summary> /// This method is called when the model for a derived context has been initialized, but /// before the model has been locked down and used to initialize the context. The default /// implementation of this method takes the <see cref="IMappingConfiguration" /> array passed in on construction and /// applies them. /// If no configuration mappings were passed it it does nothing. /// </summary> /// <remarks> /// Typically, this method is called only once when the first instance of a derived context /// is created. The model for that context is then cached and is for all further instances of /// the context in the app domain. This caching can be disabled by setting the ModelCaching /// property on the given ModelBuidler, but note that this can seriously degrade performance. /// More control over caching is provided through use of the DbModelBuilder and DbContextFactory /// classes directly. /// </remarks> /// <param name="modelBuilder">The builder that defines the model for the context being created</param> protected override void OnModelCreating(DbModelBuilder modelBuilder) { if (_databaseFirst) { throw new UnintentionalCodeFirstException(); } _log.Debug("\tOnModelCreating"); if (_mapping != null) { _log.TraceFormat("\t\tMapping : {0}", _mapping.GetType().Name); _mapping.ConfigureModelBuilder(modelBuilder); } base.OnModelCreating(modelBuilder); }