Exemple #1
0
        public DbSetInfo GetByTableName(FullTableName tableName)
        {
            DbSetInfo entity;

            _dbSets.TryGetValue(tableName, out entity);
            return(entity);
        }
Exemple #2
0
        private void Prepare()
        {
            // todo: bad design - make service
            var model = ModelsCachedContainer.GetRawModel(_dbContextType, _logger);

            UsedDbContextModel = model != null;
            Log(nameof(Prepare),
                UsedDbContextModel
                    ? "Use dbContext model"
                    : "Don't use dbContext model");
            var tableNames = GetTableNamesFromModel(model, _logger);

            DefaultSchema = DefaultSchemaUpdater.GetDefaultSchema(_dbContextType, model, _logger);
            foreach (var property in _dbContextType.GetProperties())
            {
                var propertyType = property.PropertyType;
                if (!propertyType.GetTypeInfo().IsGenericType)
                {
                    continue;
                }
                if (propertyType.GetGenericTypeDefinition() != typeof(DbSet <>))
                {
                    continue;
                }
                var entityType = propertyType.GetGenericArguments()[0];
                var entity     = CreateDbSetWrapper(entityType, property.Name, tableNames);
                var key        = new FullTableName(entity.TableName, entity.Schema);
                _dbSets[key] = entity;
            }
        }
Exemple #3
0
        private void Prepare()
        {
            // todo: bad design - make service
            var model = ModelsCachedContainer.GetRawModel(_dbContextType, _logger);

            UsedDbContextModel = model != null;
            Log(nameof(Prepare),
                UsedDbContextModel
                    ? "Use dbContext model"
                    : "Don't use dbContext model");
            DefaultSchema = DefaultSchemaUpdater.GetDefaultSchema(_dbContextType, model, _logger);
            var rawTableNames = GetTableNamesFromModel(model, _logger);

            DefaultIsUnicodeText = DefaultSchemaUpdater.GetDefaultIsUnicodeText(_dbContextType, _logger);
            foreach (var i in UsedShamanOptions.Services.OfType <IModelPrepareService>())
            {
                i.UpdateModel(this, _dbContextType, _logger);
            }

/*
 *          foreach (var property in _dbContextType.GetProperties())
 *          {
 *              var propertyType = property.PropertyType;
 *              if (!propertyType.GetTypeInfo().IsGenericType) continue;
 *              if (propertyType.GetGenericTypeDefinition() != typeof(DbSet<>)) continue;
 *              var entityType = propertyType.GetGenericArguments()[0];
 *
 *              var fullTableName = GetTableName(entityType, property.Name, rawTableNames, DefaultSchema);
 *              var entity     = CreateDbSetWrapper(entityType, fullTableName);
 *              var key = new FullTableName(entity.TableName, entity.Schema);
 *              key = key.WithDefaultSchema(DefaultSchema);
 *              _dbSets[key] = entity;
 *              _dbSetsWithoutModifications[fullTableName] = entity;
 *          }
 */
            foreach (var aa in GetEntityTypes(_dbContextType))
            {
                var fullTableName = GetTableName(aa.EntityType, aa.Property.Name, rawTableNames, DefaultSchema);
                var entity        = CreateDbSetWrapper(aa.EntityType, fullTableName);
                var key           = new FullTableName(entity.TableName, entity.Schema);
                key          = key.WithDefaultSchema(DefaultSchema);
                _dbSets[key] = entity;
            }
        }
Exemple #4
0
        private DbSetInfo CreateDbSetWrapper(Type entityType, FullTableName fullTableNameProposition)
        {
            var dbSetInfoUpdateServices = UsedShamanOptions.Services?.OfType <IDbSetInfoUpdateService>().ToArray();

            var dbSetInfo = new DbSetInfo(entityType, fullTableNameProposition.TableName, this, fullTableNameProposition.Schema);
            {
                if (dbSetInfoUpdateServices != null)
                {
                    foreach (var i in dbSetInfoUpdateServices)
                    {
                        i.UpdateDbSetInfo(dbSetInfo, entityType, _dbContextType, _logger);
                    }
                }
            }
            var columnInfoUpdateServices = UsedShamanOptions.Services?.OfType <IColumnInfoUpdateService>().ToArray();
            var useDirectSaverForType    =
                entityType.GetTypeInfo().GetCustomAttribute <NoDirectSaverAttribute>() == null;

            foreach (var propertyInfo in entityType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                var columnInfo = new ColumnInfo(dbSetInfo.Properites.Count, propertyInfo.Name, propertyInfo)
                {
                    NotNull = NotNullFromPropertyType(propertyInfo.PropertyType)
                };
                if (useDirectSaverForType)
                {
                    var readerWriter = SimplePropertyReaderWriter.Make(entityType, propertyInfo, _logger);
                    columnInfo.ValueReader = readerWriter;
                    columnInfo.ValueWriter = readerWriter;
                }

                if (columnInfoUpdateServices != null)
                {
                    foreach (var service in columnInfoUpdateServices)
                    {
                        service.UpdateColumnInfoInModelInfo(columnInfo, dbSetInfo, _logger);
                    }
                }
                dbSetInfo.Properites.Add(columnInfo);
            }

            return(dbSetInfo);
        }