Example #1
0
        private StateEntry NewStateEntry(IEntityType entityType, IValueReader valueReader)
        {
            if (!entityType.HasClrType)
            {
                return(new ShadowStateEntry(_configuration, entityType, valueReader));
            }

            var entity = _materializerSource.GetMaterializer(entityType)(valueReader);

            return(entityType.ShadowPropertyCount > 0
                ? (StateEntry) new MixedStateEntry(_configuration, entityType, entity, valueReader)
                : new ClrStateEntry(_configuration, entityType, entity));
        }
        private StateEntry NewStateEntry(StateManager stateManager, IEntityType entityType, IValueReader valueReader)
        {
            if (!entityType.HasClrType)
            {
                return(new ShadowStateEntry(stateManager, entityType, _metadataServices, valueReader));
            }

            var entity = _materializerSource.GetMaterializer(entityType)(valueReader);

            return(entityType.ShadowPropertyCount > 0
                ? (StateEntry) new MixedStateEntry(stateManager, entityType, _metadataServices, entity, valueReader)
                : new ClrStateEntry(stateManager, entityType, _metadataServices, entity));
        }
        public virtual object GetEntity(IEntityType entityType, IValueReader valueReader, bool queryStateManager)
        {
            Check.NotNull(entityType, "entityType");
            Check.NotNull(valueReader, "valueReader");

            var keyProperties
                = entityType.GetPrimaryKey().Properties;

            var entityKey
                = _entityKeyFactorySource
                  .GetKeyFactory(keyProperties)
                  .Create(entityType, keyProperties, valueReader);

            if (entityKey == EntityKey.NullEntityKey)
            {
                return(null);
            }

            var stateEntry = _stateManager.TryGetEntry(entityKey);

            if (queryStateManager && stateEntry != null)
            {
                return(stateEntry.Entity);
            }

            BufferedEntity bufferedEntity;

            if (!_byEntityKey.TryGetValue(entityKey, out bufferedEntity))
            {
                bufferedEntity
                    = new BufferedEntity(entityType, valueReader)
                    {
                    // TODO: Optimize this by not materializing when not required for query execution. i.e.
                    //       entity is only needed in final results
                    Instance = _materializerSource.GetMaterializer(entityType)(valueReader)
                    };

                _byEntityKey.Add(entityKey, bufferedEntity);
                _byEntityInstance.Add(bufferedEntity.Instance, new List <BufferedEntity> {
                    bufferedEntity
                });
            }

            return(bufferedEntity.Instance);
        }