Beispiel #1
0
        void PrepareSubqueryMappingDictonary()
        {
            foreach (var association in MetaData.AssociateProperties)
            {
                var associateMetaData = DataProviderMetaDataGenerator.Generate(association.AssociateType);

                var alias        = $"[{{0}}.{association.Name}_{associateMetaData.TableName}]";
                var partialAlias = $"{{0}}.{association.Name}_";

                var template = $@"SELECT {alias}.{associateMetaData.IdColumnName}
                    FROM {associateMetaData.GetTableTemplate().FormatWith(partialAlias)}
                    WHERE {alias}.[{associateMetaData.IdColumnName}] = [{{1}}].[{association.Name}]";

                SubqueryMapping.Add(
                    association.Name.WithSuffix(".*"),
                    template);
            }

            foreach (var baseClass in MetaData.BaseClassesInOrder)
            {
                foreach (var pair in baseClass.GetProvider(Cache, Access, SqlCommandGenerator).SubqueryMapping)
                {
                    SubqueryMapping.Add(pair.Key, pair.Value);
                }
            }
        }
Beispiel #2
0
        void PrepareSubqueryMappingDictonary()
        {
            foreach (var association in MetaData.AssociateProperties)
            {
                var associateMetaData = DataProviderMetaDataGenerator.Generate(association.AssociateType);

                var alias        = SqlCommandGenerator.SafeId($"{{0}}.{association.Name}_{associateMetaData.TableName}");
                var partialAlias = $"{{0}}.{association.Name}_";

                var template = $@"SELECT {alias}.{associateMetaData.IdColumnName}
                    FROM {associateMetaData.GetTableTemplate(SqlCommandGenerator).FormatWith(partialAlias)}
                    WHERE {alias}.{SqlCommandGenerator.SafeId(associateMetaData.IdColumnName)} = {SqlCommandGenerator.SafeId("{1}")}.{SqlCommandGenerator.SafeId(association.Name)}";

                SubqueryMapping.Add(
                    association.Name.WithSuffix(".*"),
                    template);
            }

            foreach (var baseClass in MetaData.BaseClassesInOrder)
            {
                foreach (var pair in baseClass.GetProvider(Cache, Access, SqlCommandGenerator).SubqueryMapping)
                {
                    if (SubqueryMapping.ContainsKey(pair.Key) && SubqueryMapping[pair.Key] != pair.Value)
                    {
                        throw new Exception("Multiple subqueries needed with the same key.");
                    }

                    SubqueryMapping[pair.Key] = pair.Value;
                }
            }
        }
Beispiel #3
0
        internal DataProvider(Type type, ICache cache, IDataAccess access, ISqlCommandGenerator sqlCommandGenerator)
        {
            EntityType          = type;
            SqlCommandGenerator = sqlCommandGenerator;
            Cache  = cache;
            Access = access;

            MetaData = DataProviderMetaDataGenerator.Generate(type);

            DeleteCommand = SqlCommandGenerator.GenerateDeleteCommand(MetaData);
            UpdateCommand = SqlCommandGenerator.GenerateUpdateCommand(MetaData);
            InsertCommand = SqlCommandGenerator.GenerateInsertCommand(MetaData);

            if (UpdateCommand.IsEmpty())
            {
                UpdateSelf = entity => Task.CompletedTask;
            }
            else
            {
                UpdateSelf = UpdateSelfImpl;
            }
        }