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); }
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); }
public DocumentMap GetMappingFor(Type type) => mappings.Get(type);