Beispiel #1
0
        public (DocumentMap, string, CommandParameterValues) CreateUpdate(IId document, string tableHint)
        {
            var mapping = mappings.Get(document.GetType());

            var updates   = string.Join(", ", mapping.IndexedColumns.Select(c => "[" + c.ColumnName + "] = @" + c.ColumnName).Union(new[] { $"[JSON] = @{JsonVariableName}" }));
            var statement = $"UPDATE dbo.[{mapping.TableName}] {tableHint ?? ""} SET {updates} WHERE [{mapping.IdColumn.ColumnName}] = @{IdVariableName}";

            var parameters = GetDocumentParameters(
                m => throw new Exception("Cannot update a document if it does not have an ID"),
                document,
                mapping,
                null
                );

            statement = AppendRelatedDocumentStatementsForUpdate(statement, parameters, mapping, document);

            return(mapping, statement, parameters);
        }
Beispiel #2
0
            public TResult Map <TResult>(string prefix)
            {
                var mapping = mappings.Get(typeof(TResult));
                var json    = reader[GetColumnName(prefix, "JSON")].ToString();

                var instanceType = mapping.InstanceTypeResolver.TypeResolverFromReader((colName) => GetOrdinal(reader, GetColumnName(prefix, colName)))(reader);

                var instance = JsonConvert.DeserializeObject(json, instanceType, jsonSerializerSettings);

                foreach (var column in mappings.Get(instanceType).IndexedColumns)
                {
                    column.ReaderWriter.Write(instance, reader[GetColumnName(prefix, column.ColumnName)]);
                }

                mapping.IdColumn.ReaderWriter.Write(instance, reader[GetColumnName(prefix, mapping.IdColumn.ColumnName)]);

                return((TResult)instance);
            }
            public TResult Map <TResult>(string prefix)
            {
                var mapping = mappings.Get(typeof(TResult));
                var json    = reader[GetColumnName(prefix, "JSON")].ToString();

                var instance = JsonConvert.DeserializeObject <TResult>(json, jsonSerializerSettings);

                foreach (var column in mapping.IndexedColumns)
                {
                    column.ReaderWriter.Write(instance, reader[GetColumnName(prefix, column.ColumnName)]);
                }

                mapping.IdColumn.ReaderWriter.Write(instance, reader[GetColumnName(prefix, mapping.IdColumn.ColumnName)]);

                return(instance);
            }
Beispiel #4
0
 public DocumentMap GetMappingFor(Type type) => mappings.Get(type);