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
+}