< Summary

Class:Azure.Data.Tables.TableEntity
Assembly:Azure.Data.Tables
File(s):C:\Git\azure-sdk-for-net\sdk\tables\Azure.Data.Tables\src\TableEntity.cs
C:\Git\azure-sdk-for-net\sdk\tables\Azure.Data.Tables\src\TableEntity.Dictionary.cs
Covered lines:49
Uncovered lines:12
Coverable lines:61
Total lines:306
Line coverage:80.3% (49 of 61)
Covered branches:16
Total branches:16
Branch coverage:100% (16 of 16)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
get_PartitionKey()-100%100%
set_PartitionKey(...)-100%100%
get_RowKey()-100%100%
set_RowKey(...)-100%100%
get_Timestamp()-100%100%
set_Timestamp(...)-0%100%
get_ETag()-100%100%
set_ETag(...)-0%100%
.ctor()-100%100%
.ctor(...)-100%100%
.ctor(...)-100%100%
GetString(...)-100%100%
GetBinary(...)-100%100%
GetBoolean(...)-100%100%
GetDateTime(...)-100%100%
GetDouble(...)-100%100%
GetGuid(...)-100%100%
GetInt32(...)-100%100%
GetInt64(...)-100%100%
SetValue(...)-100%100%
GetValue(...)-100%100%
GetValue(...)-100%100%
EnforceType(...)-100%100%
get_Item(...)-100%100%
set_Item(...)-100%100%
get_Keys()-100%100%
System.Collections.Generic.IDictionary<System.String,System.Object>.get_Values()-0%100%
get_Count()-100%100%
System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.get_IsReadOnly()-0%100%
Add(...)-100%100%
ContainsKey(...)-0%100%
Remove(...)-0%100%
TryGetValue(...)-100%100%
System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.Add(...)-0%100%
Clear()-0%100%
System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.Contains(...)-0%100%
System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.CopyTo(...)-0%100%
System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.Remove(...)-0%100%
GetEnumerator()-100%100%
System.Collections.IEnumerable.GetEnumerator()-0%100%

File(s)

C:\Git\azure-sdk-for-net\sdk\tables\Azure.Data.Tables\src\TableEntity.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4using System;
 5using System.Collections;
 6using System.Collections.Generic;
 7using System.Globalization;
 8using Azure.Core;
 9
 10namespace Azure.Data.Tables
 11{
 12    /// <summary>
 13    /// A <see cref="ITableEntity"/> type which allows callers direct access to the property map of the entity.
 14    /// </summary>
 15    public partial class TableEntity : ITableEntity
 16    {
 17        private readonly IDictionary<string, object> _properties;
 18
 19        /// <summary>
 20        /// The partition key is a unique identifier for the partition within a given table and forms the first part of 
 21        /// </summary>
 22        /// <value>A string containing the partition key for the entity.</value>
 23        public string PartitionKey
 24        {
 102825            get { return GetString(TableConstants.PropertyNames.PartitionKey); }
 3226            set { _properties[TableConstants.PropertyNames.PartitionKey] = value; }
 27        }
 28
 29        /// <summary>
 30        /// The row key is a unique identifier for an entity within a given partition. Together the <see cref="Partition
 31        /// </summary>
 32        /// <value>A string containing the row key for the entity.</value>
 33        public string RowKey
 34        {
 102035            get { return GetString(TableConstants.PropertyNames.RowKey); }
 3236            set { _properties[TableConstants.PropertyNames.RowKey] = value; }
 37        }
 38
 39        /// <summary>
 40        /// The Timestamp property is a DateTime value that is maintained on the server side to record the time an entit
 41        /// The Table service uses the Timestamp property internally to provide optimistic concurrency. The value of Tim
 42        /// meaning that each time the entity is modified, the value of Timestamp increases for that entity. This proper
 43        /// </summary>
 44        /// <value>A <see cref="DateTimeOffset"/> containing the timestamp of the entity.</value>
 45        public DateTimeOffset? Timestamp
 46        {
 247            get { return GetValue(TableConstants.PropertyNames.TimeStamp) as DateTimeOffset?; }
 048            set { _properties[TableConstants.PropertyNames.TimeStamp] = value; }
 49        }
 50
 51        /// <summary>
 52        /// Gets or sets the entity's ETag. Set this value to '*' in order to force an overwrite to an entity as part of
 53        /// </summary>
 54        /// <value>A string containing the ETag value for the entity.</value>
 55        public string ETag
 56        {
 8057            get { return GetString(TableConstants.PropertyNames.Etag); }
 058            set { _properties[TableConstants.PropertyNames.Etag] = value; }
 59        }
 60
 61        /// <summary>
 62        /// Constructs an instance of a <see cref="ITableEntity" />.
 63        /// </summary>
 64        public TableEntity()
 235065            : this(null)
 66        {
 235067        }
 68
 69        /// <summary>
 70        /// Initializes a new instance of the <see cref="TableEntity"/> class with the specified partition key and row k
 71        /// </summary>
 72        /// <param name="partitionKey">A string containing the partition key of the <see cref="TableEntity"/> to be init
 73        /// <param name="rowKey">A string containing the row key of the <see cref="TableEntity"/> to be initialized.</pa
 74        public TableEntity(string partitionKey, string rowKey)
 875            : this(null)
 76        {
 877            PartitionKey = partitionKey;
 878            RowKey = rowKey;
 879        }
 80
 81        /// <summary>
 82        /// Initializes a new instance of the <see cref="TableEntity"/> class with properties in the <see cref="IDiction
 83        /// </summary>
 84        /// <param name="values">A <see cref="IDictionary"/> containing the initial values of the entity.</param>
 251885        public TableEntity(IDictionary<string, object> values)
 86        {
 251887            _properties = values != null ?
 251888                new Dictionary<string, object>(values) :
 251889                new Dictionary<string, object>();
 251890        }
 91
 92        /// <summary>
 93        /// Get the value of a <see cref="TableEntity"/>'s
 94        /// <see cref="String"/> property called
 95        /// <paramref name="key"/>.
 96        /// </summary>
 97        /// <param name="key">The name of the property.</param>
 98        /// <returns>The value of the property.</returns>
 99        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of typ
 2136100        public string GetString(string key) => GetValue<string>(key);
 101
 102        /// <summary>
 103        /// Get the value of a <see cref="TableEntity"/>'s
 104        /// <see cref="byte"/> property called
 105        /// <paramref name="key"/>.
 106        /// </summary>
 107        /// <param name="key">The name of the property.</param>
 108        /// <returns>The value of the property.</returns>
 109        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of typ
 8110        public byte[] GetBinary(string key) => GetValue<byte[]>(key);
 111
 112        /// <summary>
 113        /// Get the value of a <see cref="TableEntity"/>'s
 114        /// <see cref="String"/> property called
 115        /// <paramref name="key"/>.
 116        /// </summary>
 117        /// <param name="key">The name of the property.</param>
 118        /// <returns>The value of the property.</returns>
 119        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of typ
 10120        public bool? GetBoolean(string key) => GetValue<bool?>(key);
 121
 122        /// <summary>
 123        /// Get the value of a <see cref="TableEntity"/>'s
 124        /// <see cref="DateTime"/> property called
 125        /// <paramref name="key"/>.
 126        /// </summary>
 127        /// <param name="key">The name of the property.</param>
 128        /// <returns>The value of the property.</returns>
 129        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of typ
 8130        public DateTime? GetDateTime(string key) => GetValue<DateTime?>(key);
 131
 132        /// <summary>
 133        /// Get the value of a <see cref="TableEntity"/>'s
 134        /// <see cref="Double"/> property called
 135        /// <paramref name="key"/>.
 136        /// </summary>
 137        /// <param name="key">The name of the property.</param>
 138        /// <returns>The value of the property.</returns>
 139        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of typ
 8140        public double? GetDouble(string key) => GetValue<double?>(key);
 141
 142        /// <summary>
 143        /// Get the value of a <see cref="TableEntity"/>'s
 144        /// <see cref="Guid"/> property called
 145        /// <paramref name="key"/>.
 146        /// </summary>
 147        /// <param name="key">The name of the property.</param>
 148        /// <returns>The value of the property.</returns>
 149        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of typ
 8150        public Guid? GetGuid(string key) => GetValue<Guid?>(key);
 151
 152        /// <summary>
 153        /// Get the value of a <see cref="TableEntity"/>'s
 154        /// <see cref="Int32"/> property called
 155        /// <paramref name="key"/>.
 156        /// </summary>
 157        /// <param name="key">The name of the property.</param>
 158        /// <returns>The value of the property.</returns>
 159        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of typ
 8160        public int? GetInt32(string key) => GetValue<int?>(key);
 161
 162        /// <summary>
 163        /// Get the value of a <see cref="TableEntity"/>'s
 164        /// <see cref="Int64"/> property called
 165        /// <paramref name="key"/>.
 166        /// </summary>
 167        /// <param name="key">The name of the property.</param>
 168        /// <returns>The value of the property.</returns>
 169        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of typ
 8170        public long? GetInt64(string key) => GetValue<long?>(key);
 171
 172        /// <summary>
 173        /// Set a document property.
 174        /// </summary>
 175        /// <param name="key">The property name.</param>
 176        /// <param name="value">The property value.</param>
 177        /// <exception cref="InvalidOperationException">The given <paramref name="value"/> does not match the type of th
 178        private protected void SetValue(string key, object value)
 179        {
 33154180            Argument.AssertNotNullOrEmpty(key, nameof(key));
 181
 33154182            if (value != null && _properties.TryGetValue(key, out object existingValue) && existingValue != null)
 183            {
 52184                EnforceType(existingValue.GetType(), value.GetType());
 185            }
 33152186            _properties[key] = value;
 33152187        }
 188
 189        /// <summary>
 190        /// Get an entity property.
 191        /// </summary>
 192        /// <typeparam name="T">The expected type of the property value.</typeparam>
 193        /// <param name="key">The property name.</param>
 194        /// <returns>The value of the property.</returns>
 195        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of giv
 2194196        private protected T GetValue<T>(string key) => (T)GetValue(key, typeof(T));
 197
 198        /// <summary>
 199        /// Get an entity property.
 200        /// </summary>
 201        /// <param name="key">The property name.</param>
 202        /// <param name="type">The expected type of the property value.</param>
 203        /// <returns>The value of the property.</returns>
 204        /// <exception cref="InvalidOperationException">Value associated with given <paramref name="key"/> is not of typ
 205        private protected object GetValue(string key, Type type = null)
 206        {
 2436207            Argument.AssertNotNullOrEmpty(key, nameof(key));
 2436208            if (!_properties.TryGetValue(key, out object value) || value == null)
 209            {
 56210                return null;
 211            }
 212
 2380213            if (type != null)
 214            {
 2146215                EnforceType(type, value.GetType());
 216            }
 217
 2364218            return value;
 219        }
 220
 221        /// <summary>
 222        /// Ensures that the given type matches the type of the existing
 223        /// property; throws an exception if the types do not match.
 224        /// </summary>
 225        private static void EnforceType(Type requestedType, Type givenType)
 226        {
 2198227            if (!requestedType.IsAssignableFrom(givenType))
 228            {
 18229                throw new InvalidOperationException(string.Format(
 18230                    CultureInfo.InvariantCulture,
 18231                    $"Cannot return {requestedType} type for a {givenType} typed property."));
 232            }
 2180233        }
 234    }
 235}

C:\Git\azure-sdk-for-net\sdk\tables\Azure.Data.Tables\src\TableEntity.Dictionary.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4using System;
 5using System.Collections;
 6using System.Collections.Generic;
 7using System.Globalization;
 8using Azure.Core;
 9
 10namespace Azure.Data.Tables
 11{
 12
 13    public partial class TableEntity : IDictionary<string, object>
 14    {
 15        /// <summary>
 16        /// Gets or sets the entity's property, given the name of the property.
 17        /// </summary>
 18        /// <param name="key">A string containing the name of the property.</param>
 19        /// <returns>The property value typed as an object.</returns>
 20        public object this[string key]
 21        {
 24022            get { return GetValue(key); }
 5193023            set { SetValue(key, value); }
 24        }
 25
 26        /// <inheritdoc />
 85627        public ICollection<string> Keys => _properties.Keys;
 28
 29        /// <inheritdoc />
 030        ICollection<object> IDictionary<string, object>.Values => _properties.Values;
 31
 32        /// <inheritdoc />
 16033        public int Count => _properties.Count;
 34
 35        /// <inheritdoc />
 036        bool ICollection<KeyValuePair<string, object>>.IsReadOnly => _properties.IsReadOnly;
 37
 38        /// <inheritdoc />
 718839        public void Add(string key, object value) => SetValue(key, value);
 40
 41        /// <inheritdoc />
 042        public bool ContainsKey(string key) => _properties.ContainsKey(key);
 43
 44        /// <inheritdoc />
 045        public bool Remove(string key) => _properties.Remove(key);
 46
 47        /// <inheritdoc />
 448        public bool TryGetValue(string key, out object value) => _properties.TryGetValue(key, out value);
 49
 50        /// <inheritdoc />
 051        void ICollection<KeyValuePair<string, object>>.Add(KeyValuePair<string, object> item) => SetValue(item.Key, item
 52
 53        /// <inheritdoc />
 054        public void Clear()=> _properties.Clear();
 55
 56        /// <inheritdoc />
 057        bool ICollection<KeyValuePair<string, object>>.Contains(KeyValuePair<string, object> item) => _properties.Contai
 58
 59        /// <inheritdoc />
 060        void ICollection<KeyValuePair<string, object>>.CopyTo(KeyValuePair<string, object>[] array, int arrayIndex) => _
 61
 62        /// <inheritdoc />
 063        bool ICollection<KeyValuePair<string, object>>.Remove(KeyValuePair<string, object> item) => _properties.Remove(i
 64
 65        /// <inheritdoc />
 100066        public IEnumerator<KeyValuePair<string, object>> GetEnumerator() => _properties.GetEnumerator();
 67
 68        /// <inheritdoc />
 069        IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
 70    }
 71}