Esempio n. 1
0
        internal void RefactorActionPropertyConverted(Property item, Type target)
        {
            if (item.PropertyType != PropertyType.Attribute || item.SystemReturnType is null)
            {
                throw new NotSupportedException("Only primitive properties can have their return type converted.");
            }

            object?oldValue;

            if (DynamicEntityValues.TryGetValue(item.Name, out oldValue))
            {
                object?newValue = Conversion.Convert(item.SystemReturnType, target, oldValue);
                DynamicEntityValues[item.Name] = newValue;
            }
        }
Esempio n. 2
0
        internal void RefactorActionPropertyRenamed(string oldname, Property item, MergeAlgorithm mergeAlgorithm = MergeAlgorithm.NotApplicable)
        {
            if (item.PropertyType == PropertyType.Attribute)
            {
                switch (mergeAlgorithm)
                {
                case MergeAlgorithm.NotApplicable:
                case MergeAlgorithm.ThrowOnConflict:
                {
                    object?oldvalue;
                    if (DynamicEntityValues.TryGetValue(oldname, out oldvalue))
                    {
                        DynamicEntityValues.Add(item.Name, oldvalue);
                        DynamicEntityValues.Remove(oldname);
                    }
                    break;
                }

                case MergeAlgorithm.PreferSource:
                {
                    object?oldvalue;
                    if (DynamicEntityValues.TryGetValue(oldname, out oldvalue))
                    {
                        if (DynamicEntityValues.ContainsKey(item.Name))
                        {
                            DynamicEntityValues[item.Name] = oldvalue;
                        }
                        else
                        {
                            DynamicEntityValues.Add(item.Name, oldvalue);
                        }
                        DynamicEntityValues.Remove(oldname);
                    }
                    break;
                }

                case MergeAlgorithm.PreferTarget:
                {
                    if (!DynamicEntityValues.ContainsKey(item.Name))
                    {
                        object?oldvalue;
                        if (DynamicEntityValues.TryGetValue(oldname, out oldvalue))
                        {
                            DynamicEntityValues.Add(item.Name, oldvalue);
                            DynamicEntityValues.Remove(oldname);
                        }
                    }
                    break;
                }

                default:
                    throw new NotImplementedException();
                }
            }
            else
            {
                switch (mergeAlgorithm)
                {
                case MergeAlgorithm.NotApplicable:
                case MergeAlgorithm.ThrowOnConflict:
                {
                    EntityCollectionBase <DynamicEntity>?oldvalue;
                    if (DynamicEntityLinks.TryGetValue(oldname, out oldvalue))
                    {
                        DynamicEntityLinks.Add(item.Name, oldvalue);
                        DynamicEntityLinks.Remove(oldname);
                    }
                    break;
                }

                case MergeAlgorithm.PreferSource:
                {
                    EntityCollectionBase <DynamicEntity>?oldvalue;
                    if (DynamicEntityLinks.TryGetValue(oldname, out oldvalue))
                    {
                        if (DynamicEntityLinks.ContainsKey(item.Name))
                        {
                            DynamicEntityLinks[item.Name] = oldvalue;
                        }
                        else
                        {
                            DynamicEntityLinks.Add(item.Name, oldvalue);
                        }
                        DynamicEntityLinks.Remove(oldname);
                    }
                    break;
                }

                case MergeAlgorithm.PreferTarget:
                {
                    if (!DynamicEntityLinks.ContainsKey(item.Name))
                    {
                        EntityCollectionBase <DynamicEntity>?oldvalue;
                        if (DynamicEntityLinks.TryGetValue(oldname, out oldvalue))
                        {
                            DynamicEntityLinks.Add(item.Name, oldvalue);
                            DynamicEntityLinks.Remove(oldname);
                        }
                    }
                    break;
                }

                default:
                    throw new NotImplementedException();
                }
            }
        }