public StoreSchema ReadSchema(IStoreSchemaReaderParameters parameters) { var dr = parameters as EntityFrameworkStoreSchemaReaderParameters; if (dr == null) { throw new Exception($"EntityFrameworkStoreSchemaReader expects EntityFrameworkStoreSchemaReaderParameters."); } var schema = new StoreSchema { Definitions = new Dictionary <string, StoreDefinition>(), DbContextName = dr.DbContextType.FullName }; using (var db = GetDbContext(dr.DbContextType)) { var entities = db.Model.GetEntityTypes(); foreach (var entityMetadata in entities) { var def = new StoreDefinition { Properties = new Dictionary <string, StoreProperty>() }; def.Name = entityMetadata.ClrType.Name; schema.Definitions.Add(def.Name, def); var props = entityMetadata.GetProperties().ToList(); for (int i = 0; i < props.Count; i++) { var prop = props[i]; var storeProp = new StoreProperty { Name = prop.Name, Order = i, Type = GetTypeString(prop.ClrType), Pk = prop.IsPrimaryKey(), Fk = prop.IsForeignKey(), MaxLength = prop.GetMaxLength(), AutoIncrement = prop.ValueGenerated == ValueGenerated.OnAdd }; if (prop.IsForeignKey()) { var fks = prop.GetContainingForeignKeys(); storeProp.ForeignKeys = prop.GetContainingForeignKeys().Select(f => new StoreForeignKey { DefinitionName = f.PrincipalEntityType.ClrType.Name, PropertyName = f.PrincipalKey.Properties.First().Name, CompositePropertyNames = f.PrincipalKey.Properties.Select(p => p.Name).ToList() }).ToList(); } def.Properties.Add(storeProp.Name, storeProp); } } } return(schema); }
public void Configure(IQueryControllerConfiguration config) { _reader = config.Reader; _storage = config.Storage; _readerParameters = config.ReaderParameters; _resolver = config.Resolver; _expressions = config.ExpressionEngine; }
public StoreSchema ReadSchema(IStoreSchemaReaderParameters parameters) { var fn = (parameters as JsonStoreSchemaReaderParameters).SchemaFile; var path = Path.GetDirectoryName(fn); var fileName = Path.GetFileName(fn); var schema = _schemaStorage.LoadSchema(new StorageParameters { FileName = fileName, Path = path }); return(schema); }