diff --git a/Orm/Xtensive.Orm.Tests/Issues/IssueJira0760_OverrideFieldNameAttributeRuinsFieldMappingOnUpgrade.cs b/Orm/Xtensive.Orm.Tests/Issues/IssueJira0760_OverrideFieldNameAttributeRuinsFieldMappingOnUpgrade.cs index e6aa9ff41..828936e7e 100644 --- a/Orm/Xtensive.Orm.Tests/Issues/IssueJira0760_OverrideFieldNameAttributeRuinsFieldMappingOnUpgrade.cs +++ b/Orm/Xtensive.Orm.Tests/Issues/IssueJira0760_OverrideFieldNameAttributeRuinsFieldMappingOnUpgrade.cs @@ -5,10 +5,12 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Text; using NUnit.Framework; using Xtensive.Orm.Building; using Xtensive.Orm.Building.Definitions; +using Xtensive.Orm.Model; using Xtensive.Orm.Model.Stored; using Xtensive.Orm.Tests.Issues.IssueJira0760_OverrideFieldNameAttributeRuinsFieldMappingOnUpgradeModel; using Xtensive.Orm.Upgrade; @@ -145,10 +147,12 @@ public void OnBuilt(Domain domain) public void OnDefinitionsBuilt(BuildingContext context, DomainModelDef model) { - var stateField = model.Types[typeof(EntityWithState)].Fields["State"]; - - stateField.Name = "EntityWithState.State"; + var fields = model.Types[typeof(EntityWithState)].Fields; + var stateField = fields["State"]; + fields.Remove(stateField); + typeof(Node).GetField("name", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(stateField, "EntityWithState.State"); stateField.MappingName = "EntityWithState.State"; + fields.Add(stateField); } } diff --git a/Orm/Xtensive.Orm/Orm/Building/Builders/IndexBuilder.cs b/Orm/Xtensive.Orm/Orm/Building/Builders/IndexBuilder.cs index 28b9827b2..f2b9b3e7a 100644 --- a/Orm/Xtensive.Orm/Orm/Building/Builders/IndexBuilder.cs +++ b/Orm/Xtensive.Orm/Orm/Building/Builders/IndexBuilder.cs @@ -791,8 +791,7 @@ private IEnumerable GatherValueColumns(IEnumerable colum yield return column; } else if (!column.IsSystem) { - var clone = column.Clone(); - clone.Name = nameBuilder.BuildColumnName(column); + var clone = column.Clone(nameBuilder.BuildColumnName(column)); clone.Field.MappingName = clone.Name; _ = valueColumns.Add(clone.Name); yield return clone; diff --git a/Orm/Xtensive.Orm/Orm/Building/Builders/ModelBuilder.cs b/Orm/Xtensive.Orm/Orm/Building/Builders/ModelBuilder.cs index 4b83542a1..12504c0de 100644 --- a/Orm/Xtensive.Orm/Orm/Building/Builders/ModelBuilder.cs +++ b/Orm/Xtensive.Orm/Orm/Building/Builders/ModelBuilder.cs @@ -373,8 +373,7 @@ private void BuildAuxiliaryTypes(IEnumerable associations) var underlyingType = GenerateAuxiliaryType(association); // Defining auxiliary type - var underlyingTypeDef = modelDefBuilder.DefineType(underlyingType); - underlyingTypeDef.Name = association.Name; + var underlyingTypeDef = modelDefBuilder.DefineType(underlyingType, association.Name); underlyingTypeDef.MappingName = context.NameBuilder.BuildAuxiliaryTypeMappingName(association); // Copy mapping information from master type underlyingTypeDef.MappingSchema = association.OwnerType.MappingSchema; diff --git a/Orm/Xtensive.Orm/Orm/Building/Builders/ModelDefBuilder.cs b/Orm/Xtensive.Orm/Orm/Building/Builders/ModelDefBuilder.cs index b89640ad4..bde2c4d57 100644 --- a/Orm/Xtensive.Orm/Orm/Building/Builders/ModelDefBuilder.cs +++ b/Orm/Xtensive.Orm/Orm/Building/Builders/ModelDefBuilder.cs @@ -224,10 +224,10 @@ private void ProcessIndexes(TypeDef typeDef) #region Definition-related members - public TypeDef DefineType(Type type) + public TypeDef DefineType(Type type, string name = null) { var typeDef = new TypeDef(this, type, context.Validator); - typeDef.Name = context.NameBuilder.BuildTypeName(context, typeDef); + typeDef.Name = name ?? context.NameBuilder.BuildTypeName(context, typeDef); if (!(type.UnderlyingSystemType.IsInterface || type.IsAbstract)) { var sta = type.GetAttribute(AttributeSearchOptions.Default); @@ -382,4 +382,4 @@ public ModelDefBuilder(BuildingContext context) types = new Queue(context.Configuration.Types); } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Building/Builders/TypeBuilder.cs b/Orm/Xtensive.Orm/Orm/Building/Builders/TypeBuilder.cs index caebfc808..bedd67d8b 100644 --- a/Orm/Xtensive.Orm/Orm/Building/Builders/TypeBuilder.cs +++ b/Orm/Xtensive.Orm/Orm/Building/Builders/TypeBuilder.cs @@ -325,7 +325,7 @@ private FieldInfo BuildDeclaredField(TypeInfo type, FieldDef fieldDef) private void BuildInheritedField(TypeInfo type, FieldInfo inheritedField) { BuildLog.Info(nameof(Strings.LogBuildingInheritedFieldXY), type.Name, inheritedField.Name); - var field = inheritedField.Clone(); + var field = inheritedField.Clone(null); type.Fields.Add(field); field.ReflectedType = type; field.DeclaringType = inheritedField.DeclaringType; @@ -343,7 +343,8 @@ private void BuildNestedFields(FieldInfo source, FieldInfo target, IEnumerable #region ICloneable methods /// - object ICloneable.Clone() => Clone(); + object ICloneable.Clone() => Clone(null); /// /// Clones this instance. /// - public ColumnInfo Clone() + public ColumnInfo Clone(string newName) { - ColumnInfo clone = new ColumnInfo(fld); - clone.Name = Name; + ColumnInfo clone = new(fld) { Name = newName ?? Name }; clone.attributes = attributes; clone.valueType = valueType; clone.length = length; diff --git a/Orm/Xtensive.Orm/Orm/Model/FieldInfo.cs b/Orm/Xtensive.Orm/Orm/Model/FieldInfo.cs index b4ab9e361..71141a2ac 100644 --- a/Orm/Xtensive.Orm/Orm/Model/FieldInfo.cs +++ b/Orm/Xtensive.Orm/Orm/Model/FieldInfo.cs @@ -758,15 +758,15 @@ public override int GetHashCode() #region ICloneable methods /// - object ICloneable.Clone() => Clone(); + object ICloneable.Clone() => Clone(null); /// /// Clones this instance. /// - public FieldInfo Clone() + public FieldInfo Clone(string newName) { var clone = new FieldInfo(declaringType, reflectedType, Attributes) { - Name = Name, + Name = newName ?? Name, OriginalName = OriginalName, MappingName = MappingName, underlyingProperty = underlyingProperty, diff --git a/Orm/Xtensive.Orm/Orm/Model/Node.cs b/Orm/Xtensive.Orm/Orm/Model/Node.cs index 834e09ea9..9c588f513 100644 --- a/Orm/Xtensive.Orm/Orm/Model/Node.cs +++ b/Orm/Xtensive.Orm/Orm/Model/Node.cs @@ -15,7 +15,7 @@ namespace Xtensive.Orm.Model ///An abstract base class for model node. /// [Serializable] - public abstract class Node : LockableBase, IChangeNotifier + public abstract class Node : LockableBase { private string name; @@ -24,23 +24,16 @@ public abstract class Node : LockableBase, IChangeNotifier /// public string Name { - get { return name; } - set { + get => name; + internal set { EnsureNotLocked(); + if (name is not null) + throw new InvalidOperationException("The node Name is locked."); ValidateName(value); - ChangeState("Name", delegate { name = value; }); + name = value; } } - private void ChangeState(string property, Action onChangeStateDelegate) - { - if (Changing != null) - Changing(this, new ChangeNotifierEventArgs(property)); - onChangeStateDelegate(); - if (Changed != null) - Changed(this, new ChangeNotifierEventArgs(property)); - } - /// /// Performs additional custom processes before setting new name to this instance. /// @@ -49,16 +42,6 @@ protected virtual void ValidateName(string newName) { } - #region IChangeNotifier Members - - /// - public event EventHandler Changing; - - /// - public event EventHandler Changed; - - #endregion - /// /// Updates the internal state of this instance. /// diff --git a/Version.props b/Version.props index 3d2a75e6a..9875c5953 100644 --- a/Version.props +++ b/Version.props @@ -2,8 +2,8 @@ - 7.2.163 - servicetitan + 7.2.164 + servicetitan-test