コード例 #1
0
 public static void SetValues(this IPropertyBagEntry propertyBagEntry, Dictionary <IProperty, object> values)
 {
     foreach (var value in values)
     {
         propertyBagEntry[value.Key] = value.Value;
     }
 }
コード例 #2
0
        public virtual StateEntry GetPrincipal([NotNull] IPropertyBagEntry dependentEntry, [NotNull] IForeignKey foreignKey)
        {
            Check.NotNull(dependentEntry, "dependentEntry");
            Check.NotNull(foreignKey, "foreignKey");

            var dependentKeyValue = dependentEntry.GetDependentKeyValue(foreignKey);

            if (dependentKeyValue == EntityKey.NullEntityKey)
            {
                return(null);
            }

            // TODO: Perf: Add additional indexes so that this isn't a linear lookup
            var principals = StateEntries.Where(
                e => e.EntityType == foreignKey.ReferencedEntityType &&
                dependentKeyValue.Equals(e.GetPrincipalKeyValue(foreignKey))).ToArray();

            if (principals.Length > 1)
            {
                // TODO: Better exception message
                throw new InvalidOperationException("Multiple matching principals.");
            }

            return(principals.FirstOrDefault());
        }
コード例 #3
0
        public static EntityKey GetPrincipalKeyValue([NotNull] this IPropertyBagEntry propertyBagEntry, [NotNull] IForeignKey foreignKey)
        {
            Check.NotNull(propertyBagEntry, "propertyBagEntry");
            Check.NotNull(foreignKey, "foreignKey");

            return(propertyBagEntry.StateEntry.CreateKey(foreignKey.ReferencedEntityType, foreignKey.ReferencedProperties, propertyBagEntry));
        }
コード例 #4
0
        public static bool HasDefaultValue([NotNull] this IPropertyBagEntry entry, [NotNull] IProperty property)
        {
            Check.NotNull(entry, "entry");
            Check.NotNull(property, "property");

            return(property.PropertyType.IsDefaultValue(entry[property]));
        }
コード例 #5
0
        public override EntityKey Create(IEntityType entityType, IReadOnlyList<IProperty> properties, IPropertyBagEntry propertyBagEntry)
        {
            Check.NotNull(entityType, "entityType");
            Check.NotNull(properties, "properties");
            Check.NotNull(propertyBagEntry, "propertyBagEntry");

            return Create(entityType, properties.Select(p => propertyBagEntry[p]).ToArray());
        }
コード例 #6
0
        public static EntityKey GetPrimaryKeyValue([NotNull] this IPropertyBagEntry propertyBagEntry)
        {
            Check.NotNull(propertyBagEntry, "propertyBagEntry");

            var entityType = propertyBagEntry.StateEntry.EntityType;

            return(propertyBagEntry.StateEntry.CreateKey(entityType, entityType.GetPrimaryKey().Properties, propertyBagEntry));
        }
コード例 #7
0
        public static bool HasDefaultValue([NotNull] this IPropertyBagEntry entry, [NotNull] IProperty property)
        {
            Check.NotNull(entry, "entry");
            Check.NotNull(property, "property");

            var value = entry[property];

            return(value == null || value.Equals(property.PropertyType.GetDefaultValue()));
        }
コード例 #8
0
        public virtual EntityKey CreateKey(
            [NotNull] IEntityType entityType,
            [NotNull] IReadOnlyList <IProperty> properties,
            [NotNull] IPropertyBagEntry propertyBagEntry)
        {
            Check.NotNull(entityType, "entityType");
            Check.NotEmpty(properties, "properties");
            Check.NotNull(propertyBagEntry, "propertyBagEntry");

            return(_metadataServices.CreateKey(entityType, properties, propertyBagEntry));
        }
コード例 #9
0
        public virtual EntityKey CreateKey(
            [NotNull] IEntityType entityType,
            [NotNull] IReadOnlyList <IProperty> properties,
            [NotNull] IPropertyBagEntry propertyBagEntry)
        {
            Check.NotNull(entityType, "entityType");
            Check.NotEmpty(properties, "properties");
            Check.NotNull(propertyBagEntry, "propertyBagEntry");

            return(_entityKeyFactorySource
                   .GetKeyFactory(properties)
                   .Create(entityType, properties, propertyBagEntry));
        }
コード例 #10
0
        public override EntityKey Create(IEntityType entityType, IReadOnlyList <IProperty> properties, IPropertyBagEntry propertyBagEntry)
        {
            Check.NotNull(entityType, "entityType");
            Check.NotNull(properties, "properties");
            Check.NotNull(propertyBagEntry, "propertyBagEntry");

            return(Create(entityType, properties.Select(p => propertyBagEntry[p]).ToArray()));
        }
コード例 #11
0
        private KeyValue CreateDependentKeyValue(IPropertyBagEntry propertyBagEntry, IForeignKey foreignKey, ValueType valueType)
        {
            var key = propertyBagEntry.GetDependentKeyValue(foreignKey);

            return(new KeyValue(foreignKey, key, valueType));
        }
コード例 #12
0
        private KeyValue CreatePrincipalKeyValue(IPropertyBagEntry propertyBagEntry, IForeignKey foreignKey, ValueType valueType)
        {
            var key = propertyBagEntry.GetPrincipalKeyValue(foreignKey);

            return(new KeyValue(foreignKey, key, valueType));
        }
コード例 #13
0
 public abstract EntityKey Create(
     [NotNull] IEntityType entityType, [NotNull] IReadOnlyList <IProperty> properties, [NotNull] IPropertyBagEntry propertyBagEntry);
コード例 #14
0
        public override EntityKey Create(IEntityType entityType, IReadOnlyList <IProperty> properties, IPropertyBagEntry propertyBagEntry)
        {
            Check.NotNull(entityType, "entityType");
            Check.NotNull(properties, "properties");
            Check.NotNull(propertyBagEntry, "propertyBagEntry");

            var value = propertyBagEntry[properties[0]];

            return(value == null
                ? EntityKey.NullEntityKey
                : new SimpleEntityKey <TKey>(entityType, (TKey)value));
        }