internal static DynamicTypeDefinitionManager Create(DynamicMetadataProvider metadataProvider, Type dynamicDbContextType) { var typeDefinitionManager = new DynamicTypeDefinitionManager(dynamicDbContextType, metadataProvider.InformationSchema); InitializeDbContext(metadataProvider, dynamicDbContextType, typeDefinitionManager); return(typeDefinitionManager); }
private DynamicTypeDefinitionManager(DbContextOptions options, DynamicMetadataProvider metadataProvider, ConstructorInfo dynamicDbContextCtor) { MetadataProvider = metadataProvider; NewExpression ctor = Expression.New(dynamicDbContextCtor, Expression.Constant(options), Expression.Constant(this)); _dynamicDbContextCtor = Expression.Lambda <Func <DynamicDbContext> >(ctor).Compile(); _dynamicTypeDefinitions = new Dictionary <Type, DynamicTypeDefinition>(); _tableNameTypes = new Dictionary <String, Type>(); }
public static DynamicTypeDefinitionManager Create(DbContextOptions options, DynamicMetadataProvider metadataProvider) { int dynamicDbContextIndex = Interlocked.Increment(ref _dynamicDbContextIndex); Type dynamicDbContextType = Type.GetType(typeof(DynamicDbContext).FullName + dynamicDbContextIndex.ToString("D2")); ConstructorInfo ctor = dynamicDbContextType.GetConstructor(new Type[] { typeof(DbContextOptions), typeof(DynamicTypeDefinitionManager) }); var typeDefinitionManager = new DynamicTypeDefinitionManager(options, metadataProvider, ctor); ctor = dynamicDbContextType.GetConstructor(new Type[] { typeof(DbContextOptions), typeof(DynamicModelBuilder).MakeByRefType() }); var dbContext = (DynamicDbContext)ctor.Invoke(new Object[] { options, new DynamicModelBuilder(typeDefinitionManager) }); _ = dbContext.Model; //force OnModelCreating return(typeDefinitionManager); }
public static DynamicTypeDefinitionManager Create(DynamicMetadataProvider metadataProvider) { int dynamicDbContextIndex = Interlocked.Increment(ref _dynamicDbContextIndex); Type dynamicDbContextType = Type.GetType(typeof(DynamicDbContext).FullName + dynamicDbContextIndex.ToString("D2")); if (dynamicDbContextType == null) { throw new InvalidOperationException("DynamicDbContext out range " + dynamicDbContextIndex.ToString()); } var typeDefinitionManager = new DynamicTypeDefinitionManager(dynamicDbContextType, metadataProvider.InformationSchema); ConstructorInfo ctor = dynamicDbContextType.GetConstructor(new Type[] { typeof(DbContextOptions), typeof(DynamicModelBuilder).MakeByRefType() }); DbContextOptions options = CreateOptions(metadataProvider.InformationSchema.DynamicDbContextOptions, dynamicDbContextType); var dbContext = (DynamicDbContext)ctor.Invoke(new Object[] { options, new DynamicModelBuilder(metadataProvider, typeDefinitionManager) }); _ = dbContext.Model; //force OnModelCreating return(typeDefinitionManager); }
public virtual DynamicTypeDefinitionManager Create(DynamicMetadataProvider metadataProvider) { return(DynamicTypeDefinitionManager.Create(metadataProvider, CreateDynamicDbContextType())); }
public override DynamicTypeDefinitionManager Create(DynamicMetadataProvider metadataProvider) { return(EmitDynamicTypeDefinitionManager.Create(metadataProvider, CreateDynamicDbContextType())); }