private SchemaTablePair GetSchemaAndTableName <T>(DbContext context)
            where T : class
        {
            var t = typeof(T);

            if (!TableNames.TryGetValue(t, out var result))
            {
                var sql = context.Model.FindEntityType(t);

                result = new SchemaTablePair
                {
                    Schema = sql.GetSchema() ?? DefaultSchema,
                    Table  = sql.GetTableName()
                };

                if (result != null &&
                    !string.IsNullOrWhiteSpace(result.Schema) &&
                    !string.IsNullOrWhiteSpace(result.Table))
                {
                    TableNames.TryAdd(t, result);
                }
                else
                {
                    throw new MassTransitException("Couldn't determine table and schema name (using model metadata).");
                }
            }

            return(result);
        }
Exemple #2
0
        SchemaTablePair GetSchemaAndTableName(DbContext context, Type type)
        {
            if (TableNames.TryGetValue(type, out var result) && _enableSchemaCaching)
            {
                return(result);
            }

            string entityName = type.Name;

            ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
            ReadOnlyCollection <EntityContainerMapping> storageMetadata = objectContext.MetadataWorkspace.GetItems <EntityContainerMapping>(DataSpace.CSSpace);

            foreach (EntityContainerMapping mapping in storageMetadata)
            {
                if (mapping.StoreEntityContainer.TryGetEntitySetByName(entityName, true, out var entitySet))
                {
                    result = new SchemaTablePair(entitySet.Schema ?? DefaultSchema, entitySet.Table);
                    break;
                }
            }

            if (result != null && _enableSchemaCaching)
            {
                TableNames.TryAdd(type, result);
            }

            return(result);
        }
Exemple #3
0
        SchemaTablePair GetSchemaAndTableName(IDbContextDependencies dependencies, Type type)
        {
            if (TableNames.TryGetValue(type, out var result) && _enableSchemaCaching)
            {
                return(result);
            }

            var entityType = dependencies.Model.FindEntityType(type);

            var schema    = entityType.GetSchema();
            var tableName = entityType.GetTableName();

            if (string.IsNullOrWhiteSpace(tableName))
            {
                throw new MassTransitException($"Unable to determine saga table name: {TypeMetadataCache.GetShortName(type)} (using model metadata).");
            }

            result = new SchemaTablePair(schema ?? DefaultSchema, tableName);

            if (_enableSchemaCaching)
            {
                TableNames.TryAdd(type, result);
            }

            return(result);
        }
Exemple #4
0
        private SchemaTablePair GetSchemaAndTableName <T>(DbContext context)
            where T : class
        {
            var t = typeof(T);

            ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;

            if (!TableNames.TryGetValue(t, out var result))
            {
                string entityName = t.Name;

                ReadOnlyCollection <EntityContainerMapping> storageMetadata =
                    objectContext.MetadataWorkspace.GetItems <EntityContainerMapping>(DataSpace.CSSpace);

                foreach (EntityContainerMapping ecm in storageMetadata)
                {
                    if (ecm.StoreEntityContainer.TryGetEntitySetByName(entityName, true, out var entitySet))
                    {
                        result = new SchemaTablePair
                        {
                            Schema = entitySet.Schema ?? DefaultSchema,
                            Table  = entitySet.Table
                        };
                        break;
                    }
                }

                if (result != null)
                {
                    TableNames.TryAdd(t, result);
                }
                else
                {
                    throw new MassTransitException("Couldn't determine table and schema name (using metadata for EF Code First).");
                }
            }

            return(result);
        }