private object GetTargetEntity( IEntityType targetEntityType, EntityKeyFactory entityKeyFactory, IReadOnlyList <IProperty> keyProperties, EntityLoadInfo entityLoadInfo, ICollection <BufferedEntity> bufferedEntities, bool querySourceRequiresTracking) { var entityKey = entityKeyFactory .Create(targetEntityType, keyProperties, entityLoadInfo.ValueReader); var targetEntity = GetEntity( targetEntityType, entityKey, entityLoadInfo, querySourceRequiresTracking); if (targetEntity != null) { List <BufferedEntity> bufferedTargetEntities; bufferedEntities.Add( _byEntityInstance.TryGetValue(targetEntity, out bufferedTargetEntities) ? bufferedTargetEntities[0] : new BufferedEntity(targetEntityType, entityLoadInfo.ValueReader) { Instance = targetEntity }); } return(targetEntity); }
private static QueryResultScope <TEntity> CreateEntity <TEntity>( IQuerySource querySource, QueryContext queryContext, QueryResultScope parentQueryResultScope, ValueBuffer valueBuffer, int valueBufferOffset, IEntityType entityType, bool queryStateManager, EntityKeyFactory entityKeyFactory, IReadOnlyList <IProperty> keyProperties, Func <ValueBuffer, object> materializer) where TEntity : class { valueBuffer = valueBuffer.WithOffset(valueBufferOffset); var entityKey = entityKeyFactory.Create(keyProperties, valueBuffer); return(new QueryResultScope <TEntity>( querySource, entityKey != EntityKey.InvalidEntityKey ? (TEntity)queryContext.QueryBuffer .GetEntity( entityType, entityKey, new EntityLoadInfo( valueBuffer, materializer), queryStateManager) : null, parentQueryResultScope)); }
public virtual void StartTracking( [NotNull] IStateManager stateManager, [NotNull] object entity, ValueBuffer valueBuffer) { Check.NotNull(stateManager, nameof(stateManager)); Check.NotNull(entity, nameof(entity)); stateManager.StartTracking( _entityType, _entityKeyFactory.Create(_entityKeyProperties, valueBuffer), entity, valueBuffer); }
private static QueryResultScope <TEntity> CreateEntity <TEntity>( IQuerySource querySource, QueryContext queryContext, QueryResultScope parentQueryResultScope, ValueBuffer valueBuffer, int valueBufferOffset, IEntityType entityType, bool queryStateManager, EntityKeyFactory entityKeyFactory, IReadOnlyList <IProperty> keyProperties, Func <ValueBuffer, object> materializer, bool allowNullResult) where TEntity : class { valueBuffer = valueBuffer.WithOffset(valueBufferOffset); var entityKey = entityKeyFactory.Create(keyProperties, valueBuffer); TEntity entity = null; if (entityKey == EntityKey.InvalidEntityKey) { if (!allowNullResult) { throw new InvalidOperationException(RelationalStrings.InvalidKeyValue(entityType.DisplayName())); } } else { entity = (TEntity)queryContext.QueryBuffer .GetEntity( entityType, entityKey, new EntityLoadInfo(valueBuffer, materializer), queryStateManager); } return(new QueryResultScope <TEntity>(querySource, entity, parentQueryResultScope)); }
private static QuerySourceScope <TEntity> CreateEntity <TEntity>( IQuerySource querySource, QueryContext queryContext, QuerySourceScope parentQuerySourceScope, DbDataReader dataReader, int readerOffset, IEntityType entityType, bool queryStateManager, EntityKeyFactory entityKeyFactory, IReadOnlyList <IProperty> keyProperties, Func <IValueReader, object> materializer) where TEntity : class { var valueReader = ((RelationalQueryContext)queryContext).ValueReaderFactory .Create(dataReader); if (readerOffset > 0) { valueReader = new OffsetValueReaderDecorator(valueReader, readerOffset); } var entityKey = entityKeyFactory.Create(entityType, keyProperties, valueReader); return(new QuerySourceScope <TEntity>( querySource, (TEntity)queryContext.QueryBuffer .GetEntity( entityType, entityKey, new EntityLoadInfo( valueReader, materializer), queryStateManager), parentQuerySourceScope)); }
public virtual EntityKey CreateEntityKey(ValueBuffer valueBuffer) => EntityKeyFactory.Create(EntityKeyProperties, valueBuffer);
public virtual EntityKey CreateEntityKey(ValueBuffer valueBuffer) { return(EntityKeyFactory.Create(EntityType, EntityKeyProperties, valueBuffer)); }