diff --git a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs index ebd4ca052..2d1a6ebb6 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs @@ -267,7 +267,7 @@ internal override Expression VisitStructureFieldExpression(StructureFieldExpress return Expression.Convert( Expression.Call( WellKnownMembers.CreateStructure, - Expression.Field(itemMaterializationContextParameter, ItemMaterializationContext.SessionFieldInfo), + Expression.Property(itemMaterializationContextParameter, ItemMaterializationContext.SessionPropertyInfo), Expression.Constant(expression.Type), persistentTupleExpression), expression.Type); @@ -313,7 +313,7 @@ internal override Expression VisitStructureExpression(StructureExpression expres return Expression.Convert( Expression.Call( WellKnownMembers.CreateStructure, - Expression.Field(itemMaterializationContextParameter, ItemMaterializationContext.SessionFieldInfo), + Expression.Property(itemMaterializationContextParameter, ItemMaterializationContext.SessionPropertyInfo), Expression.Constant(expression.Type), persistentTupleExpression), expression.Type); @@ -330,7 +330,7 @@ internal override Expression VisitKeyExpression(KeyExpression expression) WellKnownMembers.Key.Create, Expression.Constant(context.Domain), Expression.Property( - Expression.Field(itemMaterializationContextParameter, ItemMaterializationContext.SessionFieldInfo), + Expression.Property(itemMaterializationContextParameter, ItemMaterializationContext.SessionPropertyInfo), WellKnownMembers.SessionNodeId), Expression.Constant(expression.EntityType), TypeReferenceAccuracyConstantExpression, diff --git a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ItemMaterializationContext.cs b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ItemMaterializationContext.cs index 899d67fe4..c4d0bd202 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ItemMaterializationContext.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ItemMaterializationContext.cs @@ -2,8 +2,6 @@ // This code is distributed under MIT license terms. // See the License.txt file in the project root for more information. -using System; -using System.Collections.Generic; using System.Reflection; using Xtensive.Core; using Xtensive.Orm.Internals; @@ -14,21 +12,21 @@ namespace Xtensive.Orm.Linq.Materialization { - internal sealed class ItemMaterializationContext + internal readonly struct ItemMaterializationContext { public static readonly MethodInfo IsMaterializedMethodInfo = WellKnownOrmTypes.ItemMaterializationContext.GetMethod(nameof(IsMaterialized)); public static readonly MethodInfo GetEntityMethodInfo = WellKnownOrmTypes.ItemMaterializationContext.GetMethod(nameof(GetEntity)); public static readonly MethodInfo MaterializeMethodInfo = WellKnownOrmTypes.ItemMaterializationContext.GetMethod(nameof(Materialize)); - public static readonly System.Reflection.FieldInfo SessionFieldInfo = WellKnownOrmTypes.ItemMaterializationContext.GetField(nameof(Session)); + public static readonly System.Reflection.PropertyInfo SessionPropertyInfo = WellKnownOrmTypes.ItemMaterializationContext.GetProperty(nameof(Session)); - public readonly Session Session; public readonly MaterializationContext MaterializationContext; - private readonly TypeIdRegistry typeIdRegistry; private readonly Entity[] entities; - public ParameterContext ParameterContext { get; } + public Session Session => MaterializationContext.Session; + private TypeIdRegistry typeIdRegistry => Session.StorageNode.TypeIdRegistry; + public bool IsMaterialized(int index) => entities[index] != null; public Entity GetEntity(int index) => entities[index]; @@ -75,9 +73,7 @@ public ItemMaterializationContext(MaterializationContext materializationContext, { ParameterContext = parameterContext; MaterializationContext = materializationContext; - Session = materializationContext.Session; - typeIdRegistry = Session.StorageNode.TypeIdRegistry; entities = new Entity[materializationContext.EntitiesInRow]; } } diff --git a/Orm/Xtensive.Orm/Orm/Linq/Materialization/MaterializationContext.cs b/Orm/Xtensive.Orm/Orm/Linq/Materialization/MaterializationContext.cs index 1b63b5589..1a5ceb85b 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Materialization/MaterializationContext.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Materialization/MaterializationContext.cs @@ -4,10 +4,6 @@ // Created by: Alexis Kochetov // Created: 2009.05.29 -using System; -using System.Collections.Generic; -using System.Linq; -using Xtensive.Core; using Xtensive.Tuples.Transform; using Xtensive.Orm.Internals; using Xtensive.Orm.Model; @@ -29,29 +25,24 @@ private struct EntityMappingCache private readonly EntityMappingCache[] entityMappings; /// - /// Gets model of current domain model. + /// Gets the session in which materialization is executing. /// - public DomainModel Model { get; private set; } + public Session Session { get; } /// - /// Gets the session in which materialization is executing. + /// Gets model of current domain model. /// - public Session Session { get; private set; } + public DomainModel Model => Session.Domain.Model; /// /// Gets count of entities in query row. /// - public int EntitiesInRow { get; private set; } + public int EntitiesInRow => entityMappings.Length; /// /// Gets node specific type identifiers registry of current node. /// - public TypeIdRegistry TypeIdRegistry - { - get { - return Session.StorageNode.TypeIdRegistry; - } - } + public TypeIdRegistry TypeIdRegistry => Session.StorageNode.TypeIdRegistry; /// /// Gets or sets queue of materialization actions. @@ -97,27 +88,17 @@ public TypeMapping GetTypeMapping(int entityIndex, TypeInfo approximateType, int return result; } - private int ResolveTypeToNodeSpecificTypeIdentifier(TypeInfo typeInfo) - { - ArgumentNullException.ThrowIfNull(typeInfo); - return TypeIdRegistry[typeInfo]; - } - + private int ResolveTypeToNodeSpecificTypeIdentifier(TypeInfo typeInfo) => TypeIdRegistry[typeInfo]; // Constructors public MaterializationContext(Session session, int entityCount) { Session = session; - Model = session.Domain.Model; - EntitiesInRow = entityCount; entityMappings = new EntityMappingCache[entityCount]; - for (int i = 0; i < entityMappings.Length; i++) - entityMappings[i] = new EntityMappingCache { - Items = new Dictionary() - }; + entityMappings[i] = new() { Items = new Dictionary() }; } } -} \ No newline at end of file +}